X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=flavors%2Fgl%2Fsource%2Fglstate.h;h=8cba1d25b142ec022afdb94f8416d91db82e2fec;hb=HEAD;hp=e829103c7556884344bf2d80d9b6e0c99492c309;hpb=90368e53a94c6fa68cb678a1a03a9da7bf0c7dd8;p=gldbg.git diff --git a/flavors/gl/source/glstate.h b/flavors/gl/source/glstate.h index e829103..8cba1d2 100644 --- a/flavors/gl/source/glstate.h +++ b/flavors/gl/source/glstate.h @@ -29,9 +29,6 @@ struct Vector4 /** Tracks OpenGL state based on the command stream. This class is essentially a (partial) OpenGL implementation in itself. - -XXX Should determine the number of texture units the target implementation -actually supports. */ class GlState { @@ -44,12 +41,12 @@ public: private: GlDecoder *decoder; Vector4 color; - Vector4 texcoord[8]; + std::vector texcoord; Vector3 normal; unsigned active_tex; unsigned client_active_tex; TextureMap textures; - TexUnitState texunits[8]; + std::vector texunits; BufferMap buffers; BufferState *array_buffer; BufferState *element_buffer; @@ -58,8 +55,8 @@ private: ArrayState vertex_array; ArrayState normal_array; ArrayState color_array; - ArrayState texcoord_arrays[8]; - std::map attrib_arrays; + std::vector texcoord_arrays; + std::vector attrib_arrays; ShaderMap shaders; ProgramMap programs; @@ -68,41 +65,23 @@ public: ~GlState(); int decode(const char *, unsigned); - const Vector4 &get_color() const { return color; } - const Vector4 &get_texcoord(unsigned i) const { return texcoord[i]; } - const Vector3 &get_normal() const { return normal; } - const TextureMap &get_textures() const { return textures; } - const TextureState &get_texture(unsigned) const; - const TexUnitState &get_texture_unit(unsigned i) const { return texunits[i]; } - const BufferMap &get_buffers() const { return buffers; } - const BufferState &get_buffer(unsigned) const; - const BufferState *get_current_buffer(GLenum) const; - const BufferBindingState &get_buffer_binding(GLenum, unsigned) const; - const ArrayState &get_array(GLenum) const; - const ArrayState &get_texture_coord_array(unsigned) const; - const ArrayState &get_attrib_array(unsigned) const; - const ShaderMap &get_shaders() const { return shaders; } - const ShaderState &get_shader(unsigned) const; - const ProgramMap &get_programs() const { return programs; } - const ProgramState &get_program(unsigned) const; + +private: + static void glGetIntegerv(void *, GLenum, int *); + +public: + unsigned get_max_texture_units() const { return texunits.size(); } + unsigned get_max_vertex_attribs() const { return attrib_arrays.size(); } + unsigned get_max_uniform_buffer_bindings() const { return uniform_bind_points.size(); } + private: bool &get_boolean_state(GLenum); - TextureState *get_current_texture(GLenum); - BufferState *get_buffer_object(unsigned); - BufferState *get_current_buffer(GLenum); - BufferBindingState *get_buffer_binding(GLenum, unsigned); - void set_current_texture(GLenum, unsigned); - void set_current_buffer(GLenum, unsigned); - ArrayState &get_attrib_array(unsigned); - ShaderState *get_shader(unsigned, bool); - void delete_shader(unsigned); - ProgramState *get_program(unsigned, bool); - void delete_program(unsigned); + bool &get_boolean_client_state(GLenum); + static void glEnable(void *, GLenum); + static void glDisable(void *, GLenum); static void glEnableClientState(void *, GLenum); static void glDisableClientState(void *, GLenum); - static void glEnableVertexAttribArray(void *, unsigned); - static void glDisableVertexAttribArray(void *, unsigned); static void glColor3f(void *, float, float, float); static void glColor4f(void *, float, float, float, float); @@ -113,29 +92,71 @@ private: static void glTexCoord4f(void *, float, float, float, float); static void glMultiTexCoord4f(void *, unsigned, float, float, float, float); - static void glActiveTexture(void *, unsigned); - static void glBindTexture(void *, GLenum, unsigned); - static void glTexImage2D(void *, GLenum, int, int, int, int, int, GLenum, GLenum, const void *); - static void glTexParameteri(void *, GLenum, GLenum, int); - static void glTexParameteriv(void *, GLenum, GLenum, const int *); - static void glDeleteTextures(void *, int, const unsigned *); +public: + const Vector4 &get_color() const { return color; } + const Vector4 &get_texcoord(unsigned i) const { return texcoord[i]; } + const Vector3 &get_normal() const { return normal; } +private: static void glVertexPointer(void *, int, GLenum, int, const void *); static void glNormalPointer(void *, GLenum, int, const void *); static void glColorPointer(void *, int, GLenum, int, const void *); static void glClientActiveTexture(void *, unsigned); static void glTexCoordPointer(void *, int, GLenum, int, const void *); + static void glEnableVertexAttribArray(void *, unsigned); + static void glDisableVertexAttribArray(void *, unsigned); static void glVertexAttribPointer(void *, unsigned, int, GLenum, unsigned char, int, const void *); +public: + const ArrayState &get_array(GLenum) const; + const ArrayState &get_texture_coord_array(unsigned) const; + const ArrayState &get_attrib_array(unsigned) const; + +private: + static void glDrawElements(void *, GLenum, int, GLenum, const void *); + static void glDrawRangeElements(void *, GLenum, unsigned, unsigned, int, GLenum, const void *); + + void set_current_buffer(GLenum, unsigned); + BufferState *get_buffer_object(unsigned); + BufferState *get_current_buffer(GLenum); + BufferBindingState *get_buffer_binding(GLenum, unsigned); + static void glBindBuffer(void *, GLenum, unsigned); static void glBindBufferBase(void *, GLenum, unsigned, unsigned); - static void glBindBufferRange(void *, GLenum, unsigned, unsigned, int, int); - static void glBufferData(void *, GLenum, int, const void *, GLenum); - static void glBufferSubData(void *, GLenum, int, int, const void *); + static void glBindBufferRange(void *, GLenum, unsigned, unsigned, ptrdiff_t, ptrdiff_t); + static void glBufferData(void *, GLenum, ptrdiff_t, const void *, GLenum); + static void glBufferSubData(void *, GLenum, ptrdiff_t, ptrdiff_t, const void *); static void glDeleteBuffers(void *, int, const unsigned *); - static void glDrawElements(void *, GLenum, int, GLenum, const void *); - static void glDrawRangeElements(void *, GLenum, unsigned, unsigned, int, GLenum, const void *); +public: + const BufferMap &get_buffers() const { return buffers; } + const BufferState &get_buffer(unsigned) const; + const BufferState *get_current_buffer(GLenum) const; + const BufferBindingState &get_buffer_binding(GLenum, unsigned) const; + +private: + void set_current_texture(GLenum, unsigned); + TextureState *get_current_texture(GLenum); + + static void glActiveTexture(void *, unsigned); + static void glBindTexture(void *, GLenum, unsigned); + static void glTexImage1D(void *, GLenum, int, int, int, int, GLenum, GLenum, const void *); + static void glTexImage2D(void *, GLenum, int, int, int, int, int, GLenum, GLenum, const void *); + static void glTexImage3D(void *, GLenum, int, int, int, int, int, int, GLenum, GLenum, const void *); + static void glTexParameteri(void *, GLenum, GLenum, int); + static void glTexParameteriv(void *, GLenum, GLenum, const int *); + static void glDeleteTextures(void *, int, const unsigned *); + +public: + const TextureMap &get_textures() const { return textures; } + const TextureState &get_texture(unsigned) const; + const TexUnitState &get_texture_unit(unsigned i) const { return texunits[i]; } + +private: + ShaderState *get_shader(unsigned, bool); + void delete_shader(unsigned); + ProgramState *get_program(unsigned, bool); + void delete_program(unsigned); static void glCreateShader(void *, unsigned, GLenum); static void glShaderSource(void *, unsigned, int, const char **, const int *); @@ -152,6 +173,12 @@ private: static void glDeleteObjectARB(void *, unsigned); static void glGetObjectParameterivARB(void *, unsigned, GLenum, int *); static void glGetInfoLogARB(void *, unsigned, int, int *, char *); + +public: + const ShaderMap &get_shaders() const { return shaders; } + const ShaderState &get_shader(unsigned) const; + const ProgramMap &get_programs() const { return programs; } + const ProgramState &get_program(unsigned) const; }; #endif