X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=flavors%2Fgl%2Fsource%2Fglstate.cpp;h=9bfe7b5a525c898076a4f0d24624fd53bcefd44f;hb=HEAD;hp=750d70315835a45395512512ce04ff2a2963cf3d;hpb=d72ef6d75a11f6cc05ab8ec039520719e1044741;p=gldbg.git diff --git a/flavors/gl/source/glstate.cpp b/flavors/gl/source/glstate.cpp index 750d703..9bfe7b5 100644 --- a/flavors/gl/source/glstate.cpp +++ b/flavors/gl/source/glstate.cpp @@ -80,6 +80,8 @@ GlState::GlState(): decoder->glGetIntegerv = glGetIntegerv; + decoder->glEnable = glEnable; + decoder->glDisable = glDisable; decoder->glEnableClientState = glEnableClientState; decoder->glDisableClientState = glDisableClientState; @@ -197,6 +199,21 @@ void GlState::glGetIntegerv(void *user_data, GLenum pname, int *param) // Boolean state bool &GlState::get_boolean_state(GLenum state) +{ + if(state==GL_TEXTURE_1D) + return texunits[active_tex].binding_1d.enabled; + else if(state==GL_TEXTURE_2D) + return texunits[active_tex].binding_2d.enabled; + else if(state==GL_TEXTURE_3D) + return texunits[active_tex].binding_3d.enabled; + else if(state==GL_TEXTURE_CUBE_MAP) + return texunits[active_tex].binding_cube.enabled; + + static bool dummy; + return dummy; +} + +bool &GlState::get_boolean_client_state(GLenum state) { if(state==GL_VERTEX_ARRAY) return vertex_array.enabled; @@ -211,16 +228,26 @@ bool &GlState::get_boolean_state(GLenum state) return dummy; } -void GlState::glEnableClientState(void *user_data, GLenum state) +void GlState::glEnable(void *user_data, GLenum state) { reinterpret_cast(user_data)->get_boolean_state(state) = true; } -void GlState::glDisableClientState(void *user_data, GLenum state) +void GlState::glDisable(void *user_data, GLenum state) { reinterpret_cast(user_data)->get_boolean_state(state) = false; } +void GlState::glEnableClientState(void *user_data, GLenum state) +{ + reinterpret_cast(user_data)->get_boolean_client_state(state) = true; +} + +void GlState::glDisableClientState(void *user_data, GLenum state) +{ + reinterpret_cast(user_data)->get_boolean_client_state(state) = false; +} + // Vertex attributes void GlState::glColor3f(void *user_data, float r, float g, float b) @@ -415,7 +442,7 @@ void GlState::glBindBufferBase(void *user_data, GLenum target, unsigned index, u glBindBufferRange(user_data, target, index, id, 0, buffer->size); } -void GlState::glBindBufferRange(void *user_data, GLenum target, unsigned index, unsigned id, int offset, int size) +void GlState::glBindBufferRange(void *user_data, GLenum target, unsigned index, unsigned id, ptrdiff_t offset, ptrdiff_t size) { GlState *self = reinterpret_cast(user_data); if(BufferBindingState *binding = self->get_buffer_binding(target, index)) @@ -426,13 +453,13 @@ void GlState::glBindBufferRange(void *user_data, GLenum target, unsigned index, } } -void GlState::glBufferData(void *user_data, GLenum target, int size, const void *data, GLenum usage) +void GlState::glBufferData(void *user_data, GLenum target, ptrdiff_t size, const void *data, GLenum usage) { if(BufferState *buf = reinterpret_cast(user_data)->get_current_buffer(target)) buf->set_data(size, data, usage); } -void GlState::glBufferSubData(void *user_data, GLenum target, int offset, int size, const void *data) +void GlState::glBufferSubData(void *user_data, GLenum target, ptrdiff_t offset, ptrdiff_t size, const void *data) { if(BufferState *buf = reinterpret_cast(user_data)->get_current_buffer(target)) buf->set_sub_data(offset, size, data); @@ -499,10 +526,36 @@ void GlState::glBindTexture(void *user_data, GLenum target, unsigned id) reinterpret_cast(user_data)->set_current_texture(target, id); } +void GlState::glTexImage1D(void *user_data, GLenum target, int level, int ifmt, int width, int, GLenum, GLenum, const void *) +{ + if(TextureState *tex = reinterpret_cast(user_data)->get_current_texture(target)) + tex->set_image_1d(level, ifmt, width); +} + void GlState::glTexImage2D(void *user_data, GLenum target, int level, int ifmt, int width, int height, int, GLenum, GLenum, const void *) +{ + GLenum face = 0; + for(unsigned i=0; i<6; ++i) + if(texture_cube_faces[i]==target) + { + face = target; + target = GL_TEXTURE_CUBE_MAP; + break; + } + + if(TextureState *tex = reinterpret_cast(user_data)->get_current_texture(target)) + { + if(face) + tex->set_face_image_2d(face, level, ifmt, width, height); + else + tex->set_image_2d(level, ifmt, width, height); + } +} + +void GlState::glTexImage3D(void *user_data, GLenum target, int level, int ifmt, int width, int height, int depth, int, GLenum, GLenum, const void *) { if(TextureState *tex = reinterpret_cast(user_data)->get_current_texture(target)) - tex->set_image_2d(level, ifmt, width, height); + tex->set_image_3d(level, ifmt, width, height, depth); } void GlState::glTexParameteri(void *user_data, GLenum target, GLenum param, int value)