3 This file is part of gldbg
4 Copyright © 2009-2010 Mikko Rasa, Mikkosoft Productions
5 Distributed under the GPL
13 #include "arraystate.h"
14 #include "bufferstate.h"
15 #include "gldecoder.h"
16 #include "texturestate.h"
27 union { float x, r, s; };
28 union { float y, g, t; };
29 union { float z, b, p; };
30 union { float w, a, q; };
36 Tracks OpenGL state based on the command stream. This class is essentially a
37 (partial) OpenGL implementation in itself.
39 XXX Should determine the number of texture units the target implementation
45 typedef std::map<unsigned, TextureState> TextureMap;
46 typedef std::map<unsigned, BufferState> BufferMap;
54 unsigned client_active_tex;
56 TexUnitState texunits[8];
58 BufferState *array_buffer;
59 BufferState *element_buffer;
60 ArrayState vertex_array;
61 ArrayState normal_array;
62 ArrayState color_array;
63 ArrayState texcoord_arrays[8];
64 std::map<unsigned, ArrayState> attrib_arrays;
70 int decode(const char *, unsigned);
71 const Vector4 &get_color() const { return color; }
72 const Vector4 &get_texcoord(unsigned i) const { return texcoord[i]; }
73 const Vector3 &get_normal() const { return normal; }
74 const TextureMap &get_textures() const { return textures; }
75 const TextureState &get_texture(unsigned) const;
76 const TexUnitState &get_texture_unit(unsigned i) const { return texunits[i]; }
77 const BufferMap &get_buffers() const { return buffers; }
78 const BufferState &get_buffer(unsigned) const;
79 const BufferState *get_current_buffer(GLenum) const;
80 const ArrayState &get_array(GLenum) const;
81 const ArrayState &get_texture_coord_array(unsigned) const;
82 const ArrayState &get_attrib_array(unsigned) const;
84 bool &get_boolean_state(GLenum);
85 TextureState *get_current_texture(GLenum);
86 BufferState *get_current_buffer(GLenum);
87 void set_current_texture(GLenum, unsigned);
88 void set_current_buffer(GLenum, unsigned);
89 ArrayState &get_attrib_array(unsigned);
91 static void glEnableClientState(void *, GLenum);
92 static void glDisableClientState(void *, GLenum);
93 static void glEnableVertexAttribArray(void *, unsigned);
94 static void glDisableVertexAttribArray(void *, unsigned);
96 static void glColor3f(void *, float, float, float);
97 static void glColor4f(void *, float, float, float, float);
98 static void glNormal3f(void *, float, float, float);
99 static void glTexCoord1f(void *, float);
100 static void glTexCoord2f(void *, float, float);
101 static void glTexCoord3f(void *, float, float, float);
102 static void glTexCoord4f(void *, float, float, float, float);
103 static void glMultiTexCoord4f(void *, unsigned, float, float, float, float);
105 static void glActiveTexture(void *, unsigned);
106 static void glBindTexture(void *, GLenum, unsigned);
107 static void glTexImage2D(void *, GLenum, int, int, int, int, int, GLenum, GLenum, const void *);
108 static void glTexParameteri(void *, GLenum, GLenum, int);
109 static void glTexParameteriv(void *, GLenum, GLenum, const int *);
110 static void glDeleteTextures(void *, int, const unsigned *);
112 static void glVertexPointer(void *, int, GLenum, int, const void *);
113 static void glNormalPointer(void *, GLenum, int, const void *);
114 static void glColorPointer(void *, int, GLenum, int, const void *);
115 static void glClientActiveTexture(void *, unsigned);
116 static void glTexCoordPointer(void *, int, GLenum, int, const void *);
117 static void glVertexAttribPointer(void *, unsigned, int, GLenum, unsigned char, int, const void *);
119 static void glBindBuffer(void *, GLenum, unsigned);
120 static void glBufferData(void *, GLenum, int, const void *, GLenum);
121 static void glBufferSubData(void *, GLenum, int, int, const void *);
122 static void glDeleteBuffers(void *, int, const unsigned *);
124 static void glDrawElements(void *, GLenum, int, GLenum, const void *);
125 static void glDrawRangeElements(void *, GLenum, unsigned, unsigned, int, GLenum, const void *);