Changeset 383
- Timestamp:
- 12/05/02 12:07:15 (6 years ago)
- Files:
-
- trunk/RBRapier/RBRapier/Renderer/Geometry/ArrayTraversal.py (modified) (4 diffs)
- trunk/RBRapier/RBRapier/Renderer/Geometry/NumericVertexArray.c (modified) (14 diffs)
- trunk/RBRapier/RBRapier/Renderer/Geometry/VertexArrays.py (modified) (7 diffs)
- trunk/RBRapier/RBRapier/Renderer/Geometry/_nvaSetup.py (modified) (1 diff)
- trunk/RBRapier/demo/Lightwave/scene.py (modified) (1 diff)
- trunk/RBRapier/demo/Lightwave/simple.skin (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBRapier/RBRapier/Renderer/Geometry/ArrayTraversal.py
r382 r383 26 26 from OpenGL import GL 27 27 import Numeric 28 import NumericVertexArray 28 29 from Foundation.AspectOriented import Aspect 29 30 … … 114 115 _PrimitiveCount = 0 115 116 _DefaultFormat = Numeric.UInt16 116 _glDrawElementsCall = {117 Numeric.UInt8: GL.glDrawElementsub,118 Numeric.UInt16: GL.glDrawElementsus,119 Numeric.UInt32: GL.glDrawElementsui,120 }121 117 122 118 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 135 131 self._StatsData = {StatName:StatResults, _ReversePrimitveMap[self.primitive]: len(self.datacollection)} 136 132 137 self._glDrawElements = self._glDrawElementsCall[format]138 139 133 GenerateStatistics = GenerateStatistics 140 134 141 135 def Execute(self, context): 142 136 primitive = self.primitive 137 DrawElements = NumericVertexArray.DrawElementsArray 143 138 for data in self.datacollection: 144 self._glDrawElements(primitive, data)139 DrawElements(primitive, data) 145 140 146 141 self.GenerateStatistics(context) … … 169 164 def Execute(self, context): 170 165 primitive = self.primitive 171 _glDrawElements = self._glDrawElements166 _glDrawElements = NumericVertexArray.DrawElementsArray 172 167 for color, data in zip(self.colors, self.datacollection): 173 168 GL.glColor3f(*color) trunk/RBRapier/RBRapier/Renderer/Geometry/NumericVertexArray.c
r382 r383 39 39 #include <math.h> 40 40 #include <GL/gl.h> 41 #include <GL/glu.h> 42 43 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 44 /*~ Constants and Variables */ 45 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 46 47 static GLenum GLTypeFromNumericType[] = { 48 GL_UNSIGNED_BYTE, /* 0 -- Numerc.Character */ 49 GL_UNSIGNED_BYTE, /* 1 -- Numerc.UnsignedInt8 */ 50 GL_BYTE, /* 2 -- Numerc.Int8 */ 51 GL_SHORT, /* 3 -- Numerc.Int16 */ 52 GL_UNSIGNED_SHORT, /* 4 -- Numerc.UnsignedInt16 */ 53 GL_INT, /* 5 -- Numerc.Int32 */ 54 GL_UNSIGNED_INT, /* 6 -- Numerc.UnsignedInt32 */ 55 GL_FALSE, /* 7 -- unknown */ 56 GL_FLOAT, /* 8 -- Numerc.Float32 */ 57 GL_DOUBLE, /* 9 -- Numerc.Float64 */ 58 GL_FALSE, /* 10 -- Numerc.Complex32 */ 59 GL_FALSE, /* 11 -- Numerc.Complex64 */ 60 61 GL_FALSE, /* 12 -- unknown */ 62 GL_FALSE, /* 13 -- unknown */ 63 GL_FALSE, /* 14 -- unknown */ 64 GL_FALSE, /* 15 -- unknown */ 65 }; 66 67 static PyObject *nvaError = NULL; 68 static PyObject *nvaGLError = NULL; 41 69 42 70 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ … … 44 72 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 45 73 46 #define ASSURE(E,M) if(!(E)) return ErrorReturn(M) 47 48 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 49 /*~ Constants and Variables */ 50 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 51 52 static GLenum GLTypeFromNumericType[] = { 53 GL_FALSE, GL_UNSIGNED_BYTE, GL_BYTE, GL_SHORT, GL_INT, GL_FALSE, 54 GL_FLOAT, GL_DOUBLE, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE }; 55 56 static PyObject *nvaError = NULL; 74 #define ASSURE(E,M) if(!(E)) return ErrorReturn(&nvaError, M) 75 #define GLASSURE(E,M) if(!(E)) return ErrorReturn(&nvaGLError, M) 57 76 58 77 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ … … 60 79 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 61 80 62 static PyObject *ErrorReturn( char *message)63 { 64 PyErr_SetString( nvaError, message);81 static PyObject *ErrorReturn(PyObject** Error, const char *message) 82 { 83 PyErr_SetString(*Error, message); 65 84 return NULL; 66 85 } … … 70 89 GLint size = 0; 71 90 GLenum type = GL_FLOAT; 91 GLenum _glerr = GL_NO_ERROR; 72 92 PyObject *objptr = NULL; 73 93 PyArrayObject *arrayptr = NULL; … … 90 110 } 91 111 112 GLASSURE((_glerr = glGetError()) == GL_NO_ERROR, gluErrorString(_glerr)); 113 92 114 Py_INCREF(Py_None); 93 115 return Py_None; … … 98 120 GLint size = 0; 99 121 GLenum type = GL_FLOAT; 100 PyObject *objptr = NULL; 101 PyArrayObject *arrayptr = NULL; 102 103 if (!PyArg_ParseTuple(args, "O", &objptr)) return NULL; 104 105 if (objptr == Py_None) { 106 glVertexPointer(0, 0, 0, NULL); 122 GLenum _glerr = GL_NO_ERROR; 123 PyObject *objptr = NULL; 124 PyArrayObject *arrayptr = NULL; 125 126 if (!PyArg_ParseTuple(args, "O", &objptr)) return NULL; 127 128 if (objptr == Py_None) { 129 glColorPointer(0, 0, 0, NULL); 107 130 } else { 108 131 ASSURE(PyArray_Check(objptr), "NumericVertexArray assumes a Numeric array object"); … … 118 141 } 119 142 143 GLASSURE((_glerr = glGetError()) == GL_NO_ERROR, gluErrorString(_glerr)); 144 120 145 Py_INCREF(Py_None); 121 146 return Py_None; … … 126 151 GLint size = 0; 127 152 GLenum type = GL_FLOAT; 128 PyObject *objptr = NULL; 129 PyArrayObject *arrayptr = NULL; 130 131 if (!PyArg_ParseTuple(args, "O", &objptr)) return NULL; 132 133 if (objptr == Py_None) { 134 glVertexPointer(0, 0, 0, NULL); 153 GLenum _glerr = GL_NO_ERROR; 154 PyObject *objptr = NULL; 155 PyArrayObject *arrayptr = NULL; 156 157 if (!PyArg_ParseTuple(args, "O", &objptr)) return NULL; 158 159 if (objptr == Py_None) { 160 glNormalPointer(0, 0, NULL); 135 161 } else { 136 162 ASSURE(PyArray_Check(objptr), "NumericVertexArray assumes a Numeric array object"); … … 146 172 } 147 173 174 GLASSURE((_glerr = glGetError()) == GL_NO_ERROR, gluErrorString(_glerr)); 175 148 176 Py_INCREF(Py_None); 149 177 return Py_None; … … 154 182 GLint size = 0; 155 183 GLenum type = GL_FLOAT; 156 PyObject *objptr = NULL; 157 PyArrayObject *arrayptr = NULL; 158 159 if (!PyArg_ParseTuple(args, "O", &objptr)) return NULL; 160 161 if (objptr == Py_None) { 162 glVertexPointer(0, 0, 0, NULL); 184 GLenum _glerr = GL_NO_ERROR; 185 PyObject *objptr = NULL; 186 PyArrayObject *arrayptr = NULL; 187 188 if (!PyArg_ParseTuple(args, "O", &objptr)) return NULL; 189 190 if (objptr == Py_None) { 191 glTexCoordPointer(0, 0, 0, NULL); 163 192 } else { 164 193 ASSURE(PyArray_Check(objptr), "NumericVertexArray assumes a Numeric array object"); … … 173 202 glTexCoordPointer(size, type, 0, arrayptr->data); 174 203 } 204 205 GLASSURE((_glerr = glGetError()) == GL_NO_ERROR, gluErrorString(_glerr)); 175 206 176 207 Py_INCREF(Py_None); … … 183 214 GLint count = 0; 184 215 GLenum type = GL_UNSIGNED_INT; 216 GLenum _glerr = GL_NO_ERROR; 185 217 PyObject *objptr = NULL; 186 218 PyArrayObject *arrayptr = NULL; … … 196 228 197 229 glDrawElements(mode, count, type, arrayptr->data); 230 231 GLASSURE((_glerr = glGetError()) == GL_NO_ERROR, gluErrorString(_glerr)); 198 232 199 233 Py_INCREF(Py_None); … … 245 279 246 280 /* Set error to empty, and allow access from python */ 247 nvaError = Py_BuildValue("s", ""); 248 PyDict_SetItemString(dict, "error", nvaError); 281 nvaError = PyErr_NewException("NumericVertexArray.UsageError", PyExc_EnvironmentError, NULL); 282 nvaGLError = PyErr_NewException("NumericVertexArray.GLerror", PyExc_EnvironmentError, NULL); 283 284 PyDict_SetItemString(dict, "UsageError", nvaError); 285 PyDict_SetItemString(dict, "GLerror", nvaGLError); 249 286 250 287 /* Set the docstring */ trunk/RBRapier/RBRapier/Renderer/Geometry/VertexArrays.py
r382 r383 26 26 import Numeric 27 27 from OpenGL import GL 28 import NumericVertexArray 28 29 29 30 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 53 54 if format is None: format = self._DefaultFormat 54 55 self.data = Numeric.asarray(data, format) 55 self._glArrayPointer = self._glArrayPointers[format]56 56 57 57 def Select(self, context): 58 58 context.ClientStateMgr.Enable(self._glArrayType) 59 self._glArray Pointer(self.data)59 self._glArrayCall(self.data) 60 60 61 61 def Deselect(self, context): … … 70 70 71 71 _glArrayType = GL.GL_VERTEX_ARRAY 72 _glArrayPtrType = GL.GL_VERTEX_ARRAY_POINTER 73 _glArrayPointers = { 74 Numeric.Int8: GL.glVertexPointerb, 75 Numeric.Int16: GL.glVertexPointers, 76 Numeric.Int32: GL.glVertexPointeri, 77 Numeric.Float32: GL.glVertexPointerf, 78 Numeric.Float64: GL.glVertexPointerd, 79 } 72 _glArrayCall = NumericVertexArray.VertexArray 80 73 81 74 class NormalArray(ArrayBase): … … 85 78 86 79 _glArrayType = GL.GL_NORMAL_ARRAY 87 _glArrayPtrType = GL.GL_NORMAL_ARRAY_POINTER 88 _glArrayPointers = { 89 Numeric.Int8: GL.glNormalPointerb, 90 Numeric.Int16: GL.glNormalPointers, 91 Numeric.Int32: GL.glNormalPointeri, 92 Numeric.Float32: GL.glNormalPointerf, 93 Numeric.Float64: GL.glNormalPointerd, 94 } 80 _glArrayCall = NumericVertexArray.NormalArray 95 81 96 82 class TexCoordArray(ArrayBase): … … 100 86 101 87 _glArrayType = GL.GL_TEXTURE_COORD_ARRAY 102 _glArrayPtrType = None 103 _glArrayPointers = { 104 Numeric.Int8: GL.glTexCoordPointerb, 105 Numeric.Int16: GL.glTexCoordPointers, 106 Numeric.Int32: GL.glTexCoordPointeri, 107 Numeric.Float32: GL.glTexCoordPointerf, 108 Numeric.Float64: GL.glTexCoordPointerd, 109 } 88 _glArrayCall = NumericVertexArray.TexCoordArray 110 89 111 90 class ColorArray(ArrayBase): … … 115 94 116 95 _glArrayType = GL.GL_COLOR_ARRAY 117 _glArrayPtrType = GL.GL_COLOR_ARRAY_POINTER 118 _glArrayPointers = { 119 Numeric.Int8: GL.glColorPointerb, 120 Numeric.UInt8: GL.glColorPointerub, 121 Numeric.Int16: GL.glColorPointers, 122 Numeric.UInt16: GL.glColorPointerus, 123 Numeric.Int32: GL.glColorPointeri, 124 Numeric.UInt32: GL.glColorPointerui, 125 Numeric.Float32: GL.glColorPointerf, 126 Numeric.Float64: GL.glColorPointerd, 127 } 96 _glArrayCall = NumericVertexArray.ColorArray 128 97 129 98 class EdgeFlagArray(ArrayBase): … … 134 103 _DefaultFormat = Numeric.UInt8 135 104 _glArrayType = GL.GL_EDGE_FLAG_ARRAY 136 _glArrayPtrType = None 137 _glArrayPointers = { 138 Numeric.UInt8: GL.glEdgeFlagPointer, 139 } 105 #_glArrayCall = NumericVertexArray.EdgeFlagArray 140 106 trunk/RBRapier/RBRapier/Renderer/Geometry/_nvaSetup.py
r382 r383 37 37 include_dirs=[NumericDir], 38 38 sources=['NumericVertexArray.c'], 39 libraries=[' OpenGL32'])39 libraries=['opengl32', 'glu32']) 40 40 41 41 setup (name='NumericVertexArray', trunk/RBRapier/demo/Lightwave/scene.py
r382 r383 128 128 self.Sequence.AddElement(self.LightXForm.Deselect) 129 129 130 #self.Grid = Grids.TextureGrid(GridExtent=1, TextureExtent=10)131 #try: self.Grid.LoadGridTexture('coolgrid.png')132 #except IOError: pass133 #self.Sequence.AddElement(self.Grid)130 self.Grid = Grids.TextureGrid(GridExtent=1, TextureExtent=10) 131 try: self.Grid.LoadGridTexture('coolgrid.png') 132 except IOError: pass 133 self.Sequence.AddElement(self.Grid) 134 134 135 135 #self.Sequence.AddElement(AxisSets.AxisLineSet()) 136 136 137 137 args = 1,3 138 #self.GeoObj = self.LigthwaveLWO('data/RBText.lwo', *args)138 self.GeoObj = self.LigthwaveLWO('data/RBText.lwo', *args) 139 139 #self.GeoObj = self.LigthwaveLWO('data/dodecahedron.lwo', *args) 140 self.GeoObj = self.LigthwaveLWO('data/ki162a.lwo', *args)140 #self.GeoObj = self.LigthwaveLWO('data/ki162a.lwo', *args) 141 141 #self.GeoObj = self.LigthwaveLWO('data/fi110a.lwo', *args) 142 142 #self.GeoObj = self.LigthwaveLWO('data/ga102a.lwo', *args) trunk/RBRapier/demo/Lightwave/simple.skin
r356 r383 3 3 <application /> 4 4 5 <frame title='Simple Wavefront OBJLoader Demo' show='1' pos='0,0' size='800,600'>5 <frame title='Simple Lightwave LWOB Loader Demo' show='1' pos='0,0' size='800,600'> 6 6 <layout skin:save='wxDefLayout' sizerOption='1' sizerFlag='wxEXPAND'> 7 7 <glcanvas attribList='[WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_MIN_ALPHA, 8, WX_GL_DEPTH_SIZE, 8]'>
