소스 검색

Fix Renderer.copyFrameBuffer() exception

shadowislord 10 년 전
부모
커밋
af58aeb779
1개의 변경된 파일8개의 추가작업 그리고 7개의 파일을 삭제
  1. 8 7
      jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglRenderer.java

+ 8 - 7
jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglRenderer.java

@@ -66,7 +66,6 @@ import jme3tools.converters.MipMapGenerator;
 import jme3tools.shader.ShaderDebug;
 
 import static org.lwjgl.opengl.ARBDrawInstanced.*;
-import static org.lwjgl.opengl.ARBFramebufferObject.*;
 import static org.lwjgl.opengl.ARBInstancedArrays.*;
 import static org.lwjgl.opengl.ARBMultisample.*;
 import static org.lwjgl.opengl.ARBTextureMultisample.*;
@@ -84,8 +83,6 @@ import static org.lwjgl.opengl.GL14.*;
 import static org.lwjgl.opengl.GL15.*;
 import static org.lwjgl.opengl.GL20.*;
 import org.lwjgl.opengl.GL30;
-//import static org.lwjgl.opengl.GL21.*;
-//import static org.lwjgl.opengl.GL30.*;
 
 
 public class LwjglRenderer implements Renderer {
@@ -398,6 +395,10 @@ public class LwjglRenderer implements Renderer {
             maxFBOAttachs = intBuf16.get(0);
             logger.log(Level.FINER, "FBO Max renderbuffers: {0}", maxFBOAttachs);
 
+            if (hasExtension("GL_EXT_framebuffer_blit")) {
+                caps.add(Caps.FrameBufferBlit);
+            }
+            
             if (hasExtension("GL_EXT_framebuffer_multisample")) {
                 caps.add(Caps.FrameBufferMultisample);
 
@@ -1002,8 +1003,6 @@ public class LwjglRenderer implements Renderer {
                 return GL_FRAGMENT_SHADER;
             case Vertex:
                 return GL_VERTEX_SHADER;
-//            case Geometry:
-//                return ARBGeometryShader4.GL_GEOMETRY_SHADER_ARB;
             default:
                 throw new UnsupportedOperationException("Unrecognized shader type.");
         }
@@ -1459,11 +1458,13 @@ public class LwjglRenderer implements Renderer {
         if (attachmentSlot == FrameBuffer.SLOT_DEPTH) {
             return GL_DEPTH_ATTACHMENT_EXT;
         } else if (attachmentSlot == FrameBuffer.SLOT_DEPTH_STENCIL) {
-            return GL_DEPTH_STENCIL_ATTACHMENT;
+            // NOTE: Using depth stencil format requires GL3, this is already
+            // checked via render caps.
+            return GL30.GL_DEPTH_STENCIL_ATTACHMENT;
         } else if (attachmentSlot < 0 || attachmentSlot >= 16) {
             throw new UnsupportedOperationException("Invalid FBO attachment slot: " + attachmentSlot);
         }
-
+        
         return GL_COLOR_ATTACHMENT0_EXT + attachmentSlot;
     }