FBO를 사용하여 성능을 향상시키고 새로운 것을 시도하여 얻은 지식을 얻으 려하지만 다음과 같은 문제에서 실행했습니다 : 백 버퍼에 텍스처를 렌더링 할 때 그것은 완벽하게 작동합니다. (서로 다른 레이어의 텍스처가 여러 레이어로 인해 조금 느립니다) 그러나 FBO를 사용하여 다른 텍스처 위에 텍스처를 먼저 그릴 때 새로운 텍스처는 항상 흰색을 유지합니다. 코드 에 이제 텍스처에 FBO 렌더링으로 인해 흰색 텍스처가 발생합니다.
이은 (는 OpenGL 컨텍스트를 생성 한 후 (처음에 호출)) 내 FBOsetup 기능입니다 : 렌더링 이제int FBOId;
int FBOTexId;
void setupFBO(){
IntBuffer buffer = ByteBuffer.allocateDirect(1 * 4).order(ByteOrder.nativeOrder()).asIntBuffer();
glGenFramebuffersEXT(buffer);
FBOId= buffer.get();
FBOTexId=glGenTextures();
glBindTexture(GL_TEXTURE_2D, FBOTexId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, tileSize, tileSize, 0, GL_RGB, GL_UNSIGNED_BYTE, ByteBuffer.allocateDirect(4*tileSize*tileSize));
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBOId);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, FBOTexId, 0);
}
기능 :
void redraw(){
glPushMatrix();
glPushAttrib(GL_VIEWPORT_BIT | GL_COLOR_BUFFER_BIT);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBOId);
glLoadIdentity();
glOrtho(0, tileSize, tileSize, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
Main.drawTexture(0, 0, tileSize, tileSize, textureRotation, textureId);
glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0);
glPopAttrib();
glPopMatrix();
}
그리고 마지막 그리기 기능 :
void draw(){
Main.drawTexture(x*tileSize, y*tileSize, tileSize, tileSize, FBOTexId);
}
그리고 원하는 모든 사람을 위해 내 drawT exture 기능 :이 Main.drawTexture(x*tileSize, y*tileSize, tileSize, tileSize, textureRotation, textureId);
와 무승부() 함수에서 Main.draw 라인을 교체하는 경우
public static void drawTexture(float x, float y, float xSize, float ySize, float rot, int textureId){
GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureId);
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glLoadIdentity();
GL11.glTranslatef(0.5f,0.5f,0.0f);
GL11.glRotatef(rot,0.0f,0.0f,1.0f);
GL11.glTranslatef(-0.5f,-0.5f,0.0f);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0,0);
GL11.glVertex2f(x,y);
GL11.glTexCoord2f(1,0);
GL11.glVertex2f(x+xSize,y);
GL11.glTexCoord2f(1,1);
GL11.glVertex2f(x+xSize,y+ySize);
GL11.glTexCoord2f(0,1);
GL11.glVertex2f(x,y+ySize);
GL11.glEnd();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
}
는 직접 화면에 맞는 위치로 질감을 그립니다,하지만 문제는 내가 항상해야한다는 것입니다 텍스처의 모든 레이어를 다시 그려보고 FBO를 사용하여 무언가가 변경 될 때마다 모든 레이어를 그린 다음 FBO에서 텍스처 만 그리면됩니다.
뷰포트를 타일 크기로 설정 했습니까? 첫 번째 코드에서 – Robinson
이 'FBOTexId'에 할당하는 것을 차단합니다. 맞춤 함수입니까? 그것은'glGenTextures (1, & FBOTexId)'이어야합니다. 'glGenFramebufferEXT'와 동일합니까? – tamato
마지막 인수 인'glTexImage2d'에 정보를 전달할 이유가 없습니다. FBO에 그려서 채울 것입니다. – tamato