Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static void setupFrameBuffer() {
- if (dfb != 0) {
- glDeleteFramebuffersEXT(dfb);
- glDeleteTextures(dfbDepthTextures);
- glDeleteTextures(dfbColorTextures);
- }
- dfb = glGenFramebuffersEXT();
- glGenTextures((IntBuffer)dfbDepthTextures.clear().limit(usedDepthBuffers));
- glGenTextures((IntBuffer)dfbColorTextures.clear().limit(MaxColorBuffers*2));
- //glGenTextures((IntBuffer)dfbColorTexturesAlt.clear().limit(usedColorBuffers));
- dfbDepthTextures.position(0);
- dfbColorTextures.position(0); dfbColorTextures.get(dfbColorTexturesA).position(0);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, dfb);
- glDrawBuffers(GL_NONE);
- glReadBuffer(GL_NONE);
- for (int i=0; i < usedDepthBuffers; ++i)
- {
- glBindTexture(GL_TEXTURE_2D, dfbDepthTextures.get(i));
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, renderWidth, renderHeight, 0, GL_DEPTH_COMPONENT, GL11.GL_FLOAT, (ByteBuffer)null);
- }
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, dfbDepthTextures.get(0), 0);
- glDrawBuffers(dfbDrawBuffers);
- glReadBuffer(GL_NONE);
- checkGLError("FT d");
- for (int i = 0; i < usedColorBuffers; ++i) {
- glBindTexture(GL_TEXTURE_2D, dfbColorTexturesA[i]);
- // glTexParameteri(GL11.GL_TEXTURE_2D, GL12.GL_TEXTURE_MAX_LEVEL, 0);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexImage2D(GL_TEXTURE_2D, 0, gbuffersFormat[i], renderWidth, renderHeight, 0, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, (ByteBuffer)null);
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT+i, GL_TEXTURE_2D, dfbColorTexturesA[i], 0);
- checkGLError("FT c");
- }
- for (int i = 0; i < usedColorBuffers; ++i) {
- glBindTexture(GL_TEXTURE_2D, dfbColorTexturesA[MaxColorBuffers+i]);
- // glTexParameteri(GL11.GL_TEXTURE_2D, GL12.GL_TEXTURE_MAX_LEVEL, 0);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexImage2D(GL_TEXTURE_2D, 0, gbuffersFormat[i], renderWidth, renderHeight, 0, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, (ByteBuffer)null);
- checkGLError("FT ca");
- }
- int status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- if (status==GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT)
- {
- printChatAndLogError("Failed framebuffer incomplete formats");
- for (int i = 0; i < usedColorBuffers; ++i) {
- glBindTexture(GL_TEXTURE_2D, dfbColorTextures.get(i));
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, renderWidth, renderHeight, 0, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, (ByteBuffer)null);
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT+i, GL_TEXTURE_2D, dfbColorTextures.get(i), 0);
- checkGLError("FT c");
- }
- status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- if (status == GL_FRAMEBUFFER_COMPLETE_EXT) {
- SMCLog.info("complete");
- }
- }
- glBindTexture(GL_TEXTURE_2D, 0);
- if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
- printChatAndLogError("Failed creating framebuffer! (Status " + status + ")");
- } else {
- SMCLog.info("Framebuffer created.");
- }
- }
- private static void setupShadowFrameBuffer() {
- if (usedShadowDepthBuffers == 0) {
- return;
- }
- if (sfb != 0) {
- glDeleteFramebuffersEXT(sfb);
- glDeleteTextures(sfbDepthTextures);
- glDeleteTextures(sfbColorTextures);
- }
- sfb = glGenFramebuffersEXT();
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, sfb);
- glDrawBuffers(drawBuffersNone);
- glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
- glGenTextures((IntBuffer)sfbDepthTextures.clear().limit(usedShadowDepthBuffers));
- glGenTextures((IntBuffer)sfbColorTextures.clear().limit(usedShadowColorBuffers));
- //printIntBuffer(sfbDepthTextures);
- //printIntBuffer(sfbColorTextures);
- sfbDepthTextures.position(0); sfbColorTextures.position(0);
- // depth
- for (int i=0; i < usedShadowDepthBuffers; ++i)
- {
- glBindTexture(GL_TEXTURE_2D, sfbDepthTextures.get(i));
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- int filter = shadowFilterNearest[i]? GL_NEAREST : GL_LINEAR;
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
- if (shadowHardwareFilteringEnabled[i])
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, shadowMapWidth, shadowMapHeight, 0, GL_DEPTH_COMPONENT, GL11.GL_FLOAT, (FloatBuffer)null);
- }
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, sfbDepthTextures.get(0), 0);
- checkGLError("FT sd");
- // color shadow
- for (int i=0; i < usedShadowColorBuffers; ++i) {
- glBindTexture(GL_TEXTURE_2D, sfbColorTextures.get(i));
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- int filter = shadowColorFilterNearest[i]? GL_NEAREST : GL_LINEAR;
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, shadowMapWidth, shadowMapHeight, 0, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, (ByteBuffer)null);
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT+i, GL_TEXTURE_2D, sfbColorTextures.get(i), 0);
- checkGLError("FT sc");
- }
- glBindTexture(GL_TEXTURE_2D, 0);
- int status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
- printChatAndLogError("Failed creating shadow framebuffer! (Status " + status + ")");
- } else {
- SMCLog.info("Shadow framebuffer created.");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment