inline void VL_glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) { if (glFramebufferTextureLayer) glFramebufferTextureLayer(target, attachment, texture, level, layer); else if (glFramebufferTextureLayerARB) glFramebufferTextureLayerARB(target, attachment, texture, level, layer); else if (glFramebufferTextureLayerEXT) glFramebufferTextureLayerEXT(target, attachment, texture, level, layer); else VL_UNSUPPORTED_FUNC(); }
void Scene::drawAtPoint(float*point, float* direction, float*up, GLuint fbo, int width, int height, float fovy, float front, float back) { glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBOID); glUseProgram(0); glViewport(0,0,shadowMapSize, shadowMapSize); for(size_t i = 0; i < lights.size(); ++i) lights[i]->execute(); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glCullFace(GL_FRONT); for (unsigned light = 0; light < numLights; ++ light) { glFramebufferTextureLayerARB(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, shadowMapTexture, 0, light); glClear(GL_DEPTH_BUFFER_BIT); float* lightPos; float lightLookAt[3]; lightPos = lights[light]->getPosition(); lights[light]->lookAt(lightLookAt); float cutoff = lights[light]->getCutoff(); viewProjSetup(lightPos, lightLookAt, up, cutoff); drawObjects(); viewProjSetup(lightPos, lightLookAt, up, cutoff); texMatSetup(light);//load bias and projection/ } glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);//render to window glViewport(0,0,width, height); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram(shadowProgram); glUniform1i(shadowTexUniform, texUnitBase); glUniform1i(uniformTexUnitBase, texUnitBase); glUniform1i(uniformNumLights, numLights); viewProjSetup(point, direction, up, fovy, 1.0, front, back); glCullFace(GL_BACK); drawObjects(); glFlush(); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBGeometryShader4_glFramebufferTextureLayerARB(JNIEnv *__env, jclass clazz, jint target, jint attachment, jint texture, jint level, jint layer) { glFramebufferTextureLayerARBPROC glFramebufferTextureLayerARB = (glFramebufferTextureLayerARBPROC)tlsGetFunction(1115); UNUSED_PARAM(clazz) glFramebufferTextureLayerARB(target, attachment, texture, level, layer); }