Advertisement
Guest User

Porting CE renderer from JOGL to LWJGL - crash bug drawEleme

a guest
Mar 28th, 2012
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.43 KB | None | 0 0
  1. ////////////////////////////////////////////
  2. // Initialization code (RenderManagerLWJGL)
  3. ////////////////////////////////////////////
  4.  
  5.         // Clear color
  6.         GL11.glClearColor(RendererManagerBase.clearColor[0], RendererManagerBase.clearColor[1],
  7.                 RendererManagerBase.clearColor[2], RendererManagerBase.clearColor[3]);
  8.                
  9.         // Check for VBO support
  10.         String extensions = GL11.glGetString(GL11.GL_EXTENSIONS);
  11.         if (extensions.contains("vertex_buffer_object")) {
  12.             supportedVBO = true;
  13.         } else {
  14.             supportedVBO = false;
  15.         }
  16.         if (supportedVBO) {
  17.             System.out.println("Vertex Buffer Objects Supported");
  18.         } else {
  19.             System.out.println("Vertex Buffer Objects NOT Supported");
  20.         }
  21.  
  22.         GL11.glEnable(GL11.GL_LIGHTING);
  23.         GL11.glEnable(GL11.GL_LIGHT0);
  24.         GL11.glLight(GL11.GL_LIGHT0, GL11.GL_AMBIENT, zero);
  25.        
  26.         GL11.glMaterialf(GL11.GL_FRONT, GL11.GL_SHININESS, 30.0f);
  27.         GL11.glEnable(GL12.GL_RESCALE_NORMAL);
  28.        
  29.         GL11.glDisable(GL11.GL_DITHER);         //Disable dithering
  30.         GL11.glClearDepth(1.0f);                        //Depth Buffer Setup
  31.         //Really Nice Perspective Calculations
  32.         GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
  33.  
  34. ////////////////////////////////////////////
  35. // Draw code setup (RenderManagerLWJGL)
  36. ////////////////////////////////////////////
  37.  
  38.     GL11.glEnable(GL11.GL_DEPTH_TEST);          //Enables Depth Testing
  39.         GL11.glDepthFunc(GL11.GL_LEQUAL);           //The Type Of Depth Testing To Do
  40.         GL11.glDepthMask(true);                                 //Enable depth buffer writing
  41.         GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT );
  42.         GL11.glLoadIdentity();                  //Reset The Current Modelview Matrix
  43.         GL11.glFrontFace(GL11.GL_CCW);
  44.  
  45.         GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL);
  46.         GL11.glPolygonOffset(1.1f, 0.001f);
  47.  
  48.         RenderSet rSet = renderSets.get(0);
  49.         RenderSetRendererLWJGL renderer = (RenderSetRendererLWJGL)rSet.getRenderer();
  50.         renderer.setGlobalTextureState(globalTextureState);
  51.         switch (drawMode) {
  52.             case 0: // DM_EYE_VIEW
  53.                 setRenderGlobals(renderer);
  54.                 renderer.applyProjectionThenModelView(rSet, glu);
  55.                 renderer.render(rSet, glu);
  56.         ...
  57.  
  58. ////////////////////////////////////////////
  59. // Draw code setup (RenderSetRendererLWJGL)
  60. ////////////////////////////////////////////
  61.  
  62.     if (stats) {
  63.             vertexCount = 0;
  64.             triangleCount = 0;
  65.             stateChanges = 0;
  66.         }
  67.         // reset Appearance tracking for this frame.
  68.         lastAppearance = null;
  69.         GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_MODULATE);
  70.         applyLight(frame.getLight(), glu);
  71.         GL11.glDisable(GL11.GL_BLEND);
  72.         renderList(frame.getDrawListOpaque(), true && globalTextureState, 0, glu);
  73.     ...
  74.  
  75. ////////////////////////////////////////////
  76. // Draw code (RenderSetRendererLWJGL)
  77. ////////////////////////////////////////////
  78.  
  79. public void render(Shape shape, GLU glu)
  80. {
  81.         setRenderState(shape);
  82.         VertexGeometry shapeGeo = shape.geometry;
  83.         Appearance shapeApp = shape.appearance;
  84.         if (currentMat != shape.matrix) {
  85.             if (shape.matrix != null) {
  86.                 // pop last shapes matrix state
  87.                 GL11.glPopMatrix();
  88.                 // push in this shape's matrix state
  89.                 GL11.glPushMatrix();
  90.                
  91.                 shape.matrixFB.put(shape.matrix);
  92.                 shape.matrixFB.rewind();
  93.                 GL11.glMultMatrix(shape.matrixFB);
  94.             } else {
  95.                 // pop last shapes matrix state
  96.                 GL11.glPopMatrix();
  97.                 // push in this shape's matrix state
  98.                 GL11.glPushMatrix();
  99.             }
  100.             //System.out.println("Error: RenderShape null matrix");
  101.             currentMat = shape.matrix;
  102.             // stats
  103.             alphaStateSwitchCount++;
  104.         } else
  105.         {
  106.             // stats
  107.             //System.out.println("Found matching transform state...");
  108.             alphaStateShareCount++;
  109.         }
  110.  
  111.         boolean useVOBs = (supportedVBO && (shapeGeo.staticHint || forceStaticRender));
  112.         if (drawStatic == false && useVOBs) {
  113.             return;
  114.         }
  115.         // check if VOB buffers are valid, if not generate them
  116.         if (useVOBs && !shapeGeo.isBuffersLive()) {
  117.             generateBuffers(shape, glu);
  118.         }
  119.  
  120.         {
  121.             GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
  122.  
  123.             // if VOBs else use vertexpointer (arrays)
  124.             if (useVOBs) {
  125.                 if (shapeGeo.vertexBuffer.isBound()) {
  126.                     GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, shapeGeo.vertexBuffer.getId());
  127.                     GL11.glVertexPointer(3, GL11.GL_FLOAT, 0, 0);
  128.                 } else {
  129.                     System.out.println("Setting vertex pointer failed!");
  130.                 }
  131.             } else {
  132.                 shapeGeo.vertexBuffer.buffer.rewind();
  133.                 if (stats) {
  134.                     vertexCount += shapeGeo.vertexBuffer.buffer.limit() / 3;
  135.                 }
  136.                 if (shapeGeo.vertexBuffer.buffer.limit() == 0) {
  137.                     return;
  138.                 }
  139.                 GL11.glVertexPointer(3, GL11.GL_FLOAT, (FloatBuffer)shapeGeo.vertexBuffer.buffer);
  140.             }
  141.  
  142.             lastVertexArraySet.vertexBuffer = shapeGeo.vertexBuffer;
  143.         }
  144.  
  145.         {
  146.             if (shapeGeo.colorBuffer.buffer != null) {
  147.                 // if VOBs else use colorpointer (arrays)
  148.                 GL11.glEnableClientState(GL11.GL_COLOR_ARRAY);
  149.                 GL11.glEnable(GL11.GL_COLOR_MATERIAL);
  150.                 if (useVOBs) {
  151.                     GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, shapeGeo.colorBuffer.getId());
  152.                     GL11.glColorPointer(4, GL11.GL_FLOAT, 0, 0);
  153.                 } else {
  154.                     shapeGeo.colorBuffer.buffer.rewind();
  155.                     GL11.glColorPointer(4, GL11.GL_FLOAT, (FloatBuffer)shapeGeo.colorBuffer.buffer);
  156.                 }
  157.             } else {
  158.                 GL11.glDisableClientState(GL11.GL_COLOR_ARRAY);
  159.                 GL11.glDisable(GL11.GL_COLOR_MATERIAL);
  160.             }
  161.         }
  162.         lastVertexArraySet.colorBuffer.setId(shapeGeo.colorBuffer.getId());
  163.  
  164.         if (shapeGeo.normalBuffer.buffer != null) {
  165.             GL11.glEnableClientState(GL11.GL_NORMAL_ARRAY);
  166.             // if VOBs else use normalpointer (arrays)
  167.             if (useVOBs) {
  168.                 GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, shapeGeo.normalBuffer.getId());
  169.                 GL11.glNormalPointer(GL11.GL_FLOAT, 0, 0);
  170.             } else {
  171.                 shapeGeo.normalBuffer.buffer.rewind();
  172.                 GL11.glNormalPointer(GL11.GL_FLOAT, (FloatBuffer)shapeGeo.normalBuffer.buffer);
  173.             }
  174.         } else {
  175.             GL11.glDisableClientState(GL11.GL_NORMAL_ARRAY);
  176.         }
  177.         lastVertexArraySet.normalBuffer = shapeGeo.normalBuffer;
  178.  
  179.         {
  180.             if ((shapeGeo.textureCoordArray != null)
  181.                     && (shapeApp.textureStageState != null)) {
  182.                 GL11.glEnable(GL11.GL_TEXTURE_2D);
  183.                 if (!this.globalWireFrameState) {
  184.                     // set up GL13.GL_TEXTURE0
  185.                     if (shapeGeo.textureCoordArray.length > 0) {
  186.                         GL13.glClientActiveTexture(GL13.GL_TEXTURE0);
  187.                         // if VOBs else use normalpointer (arrays)
  188.                         if (useVOBs) {
  189.                             GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER,
  190.                         shapeGeo.textureCoordArray[0].getId());
  191.                             GL11.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0);
  192.                         } else {
  193.                             if (shapeGeo.textureCoordArray[0].buffer == null) {
  194.                                 throw new RuntimeException("shapeVAS.textureCoordArray[0].buffer == null;
  195.                                Shape name: " + shape.getName());
  196.                             }
  197.                             shapeGeo.textureCoordArray[0].buffer.rewind();
  198.                             GL11.glTexCoordPointer(2, GL11.GL_FLOAT,
  199.                         (FloatBuffer)shapeGeo.textureCoordArray[0].buffer);
  200.                         }
  201.                         GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
  202.                     }
  203.                     if (shapeGeo.textureCoordArray.length > 1) {
  204.  
  205.                         GL13.glClientActiveTexture(GL13.GL_TEXTURE1);
  206.                         // if VOBs else use normalpointer (arrays)
  207.                         if (useVOBs) {
  208.                             GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER,
  209.                         shapeGeo.textureCoordArray[1].getId());
  210.                             GL11.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0);
  211.                         } else {
  212.                             shapeGeo.textureCoordArray[1].buffer.rewind();
  213.                             GL11.glTexCoordPointer(2, GL11.GL_FLOAT,
  214.                         (FloatBuffer)shapeGeo.textureCoordArray[1].buffer);
  215.                         }
  216.                         GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
  217.                     } else {
  218.                         GL13.glClientActiveTexture(GL13.GL_TEXTURE1);
  219.                         GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
  220.                         GL11.glDisable(GL11.GL_TEXTURE_2D);
  221.                     }
  222.                 }
  223.             } else {
  224.                 GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
  225.                 GL11.glDisable(GL11.GL_TEXTURE_2D);
  226.             }
  227.         }
  228.  
  229.         // if VOBs else use arrays
  230.         if (shapeGeo.glType == GL11.GL_LINES) {
  231.             GL11.glLineWidth(shapeApp.lineWidth);
  232.         }
  233.         if (useVOBs) {
  234.             GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, shapeGeo.indicesBuffer.getId());
  235.             lastVertexArraySet.indicesBuffer = shapeGeo.indicesBuffer;
  236.             if (DataBuffer.useAndroidOpts)
  237.             {
  238.                 GL11.glDrawElements(
  239.                         shapeGeo.glType,
  240.                         shapeGeo.indicesBuffer.buffer.capacity(),
  241.                         GL11.GL_UNSIGNED_SHORT,
  242.                         0);
  243.             }
  244.             else
  245.             {
  246.                 GL11.glDrawElements(
  247.                         shapeGeo.glType,
  248.                         shapeGeo.indicesBuffer.buffer.capacity(),
  249.                         GL11.GL_UNSIGNED_INT,
  250.                         0);
  251.             }
  252.             // clear buffer pointers TODO: remove?
  253.             GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
  254.             GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
  255.  
  256.         } else {
  257.             if (shapeGeo.glType == GL11.GL_TRIANGLE_STRIP) {
  258.                 if (stats) {
  259.                     triangleCount += shapeGeo.vertexBuffer.buffer.limit();
  260.                 }
  261.         // /3 beacuse it wants vertex count not data size
  262.                 GL11.glDrawArrays(GL11.GL_TRIANGLE_STRIP, 0, shapeGeo.vertexBuffer.buffer.limit() / 3);    
  263.             } else {
  264.                 if (emuDebug) {
  265.                     GL13.glActiveTexture(GL13.GL_TEXTURE0);
  266.                     GL11.glDisable(GL11.GL_TEXTURE_2D);
  267.                     GL13.glActiveTexture(GL13.GL_TEXTURE1);
  268.                     GL11.glDisable(GL11.GL_TEXTURE_2D);
  269.                     shapeGeo.glType = JGL.LINES;
  270.                 }
  271.                 shapeGeo.indicesBuffer.buffer.rewind();
  272.                 if (stats) {
  273.                     triangleCount += shapeGeo.indicesBuffer.buffer.limit() / 3;
  274.                 }
  275.                 if (DataBuffer.useAndroidOpts)
  276.                 {
  277.                     // Testing sanity checks
  278.                     GL11.glDisableClientState(GL11.GL_NORMAL_ARRAY);
  279.                     GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
  280.                     GL11.glDisableClientState(GL11.GL_COLOR_ARRAY);
  281.                     System.out.println("Index array size for the test cube (should be 36): " +
  282.                     shapeGeo.indicesBuffer.buffer);
  283.                     System.out.println("Vertex array size for the test cube (should be 24): " +
  284.                     shapeGeo.vertexBuffer.buffer);
  285.                    
  286.                     GL11.glDrawElements(
  287.                             shapeGeo.glType,
  288.                             (ShortBuffer)shapeGeo.indicesBuffer.buffer);
  289. !!      !!!CRASH!!!
  290.  
  291.         ...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement