shimatta-opengl/src/shimatta-opengl-texture.c

149 lines
3.8 KiB
C

#include <shimatta-opengl-texture.h>
#include <epoxy/gl.h>
typedef struct {
GLint texture_wrap_s;
GLint texture_wrap_t;
GLint texture_min_filter;
GLint texture_max_filter;
gboolean generate_mipmap;
GLuint texture_id;
} ShimattaOpenglTexturePrivate;
G_DEFINE_TYPE_WITH_PRIVATE(ShimattaOpenglTexture, shimatta_opengl_texture, G_TYPE_OBJECT);
static int shimatta_opengl_texure_use_default_impl(ShimattaOpenglTexture *texture, unsigned int slot, gboolean use_slot)
{
ShimattaOpenglTexturePrivate *priv;
g_return_val_if_fail(SHIMATTA_IS_OPENGL_TEXTURE(texture), -1001);
priv = shimatta_opengl_texture_get_instance_private(texture);
if (use_slot) {
if (slot > 31)
return -1002;
else
glActiveTexture(GL_TEXTURE0+slot);
}
glBindTexture(GL_TEXTURE_2D, priv->texture_id);
return 0;
}
static int use_in_slot_default(ShimattaOpenglTexture *texture, unsigned int slot)
{
return shimatta_opengl_texure_use_default_impl(texture, slot, TRUE);
}
static void use_default(ShimattaOpenglTexture *texture)
{
(void)shimatta_opengl_texure_use_default_impl(texture, 0U, FALSE);
}
static void shimatta_opengl_texture_class_init(ShimattaOpenglTextureClass *klass)
{
}
static void shimatta_opengl_texture_init(ShimattaOpenglTexture *self)
{
ShimattaOpenglTexturePrivate *priv;
priv = shimatta_opengl_texture_get_instance_private(self);
priv->texture_id = 0;
priv->texture_wrap_s = GL_REPEAT;
priv->texture_wrap_s = GL_REPEAT;
priv->texture_min_filter = GL_LINEAR;
priv->texture_max_filter = GL_LINEAR;
priv->generate_mipmap = TRUE;
glGenTextures(1, &priv->texture_id);
glBindTexture(GL_TEXTURE_2D, priv->texture_id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
void shimatta_opengl_texture_use(ShimattaOpenglTexture *texture)
{
ShimattaOpenglTextureClass *klass;
g_return_if_fail(SHIMATTA_IS_OPENGL_TEXTURE(texture));
klass = SHIMATTA_OPENGL_TEXTURE_GET_CLASS(texture);
klass->use(texture);
}
int shimatta_opengl_texture_use_in_slot(ShimattaOpenglTexture *texture, unsigned int slot)
{
ShimattaOpenglTextureClass *klass;
g_return_val_if_fail(SHIMATTA_IS_OPENGL_TEXTURE(texture), -1001);
klass = SHIMATTA_OPENGL_TEXTURE_GET_CLASS(texture);
return klass->use_in_slot(texture, slot);
}
ShimattaOpenglTexture *shimatta_opengl_texture_new()
{
}
void shimatta_opengl_texture_set_filter(ShimattaOpenglTexture *texture, int filter_s, int filter_t)
{
ShimattaOpenglTexturePrivate *priv;
g_return_if_fail(SHIMATTA_IS_OPENGL_TEXTURE(texture));
priv = shimatta_opengl_texture_get_instance_private(texture);
}
void shimatta_opengl_texture_set_wrap(ShimattaOpenglTexture *texture, int wrap_s, int wrap_t)
{
}
void shimatta_opengl_texture_set_gen_mipmap(ShimattaOpenglTexture *texture, gboolean gen_mipmap)
{
}
int shimatta_opengl_texture_get_filter(ShimattaOpenglTexture *texture, int *filter_s, int *filter_t)
{
}
int shimatta_opengl_texture_get_wrap(ShimattaOpenglTexture *texture, int *filter_s, int *filter_t)
{
}
gboolean shimatta_opengl_texture_get_gen_mipmap(ShimattaOpenglTexture *texture)
{
}
int shimatta_opengl_texture_set_data(ShimattaOpenglTexture *texture, unsigned int width, unsigned int height,
GLenum format, void *buffer)
{
ShimattaOpenglTexturePrivate *priv;
g_return_val_if_fail(SHIMATTA_IS_OPENGL_TEXTURE(texture), -1001);
priv = shimatta_opengl_texture_get_instance_private(texture);
return 0;
}
int shimatta_opengl_texture_set_from_image(ShimattaOpenglTexture *texture, const char *path)
{
ShimattaOpenglTexturePrivate *priv;
g_return_val_if_fail(SHIMATTA_IS_OPENGL_TEXTURE(texture), -1001);
priv = shimatta_opengl_texture_get_instance_private(texture);
return 0;
}