在opengl-es 2.0中,fbo可以渲染爲紋理,使用比屏幕大的紋理目標?如果是這樣,是否有可能繪製紋理四邊形,填補fbo紋理角落?如果不可能的話,是否有可能以另一種方式在opengl-es中做到這一點?我在加載時有一些分層的程序生成的圖形,我想將它們組合成單個紋理,以便在繪製時節省性能。Opengl-es繪製紋理
0
A
回答
2
是的,絕對。只要紋理具有可呈現顏色的格式(在ES 2.0中只有RGBA4
,RGB5_A1
和RGB565
),它可以用作渲染目標。根據GPU的限制,這可能會大大超出顯示分辨率。
這意味着您主要受最大紋理大小的限制。您可以使用glGetIntegerv(GL_MAX_TEXTURE_SIZE, ...)
查詢該值。
還有另外一個限制。 GL_MAX_VIEWPORT_DIMS
定義您可以設置的最大視口大小。您無法渲染到大於這些值的表面。
把他們倆撮合在一起,這將給你可以渲染到紋理的最大尺寸:
GLint maxTexSize = 0;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize);
GLint maxViewportSize[2] = {0};
glGetIntegerv(GL_MAX_VIEWPORT_DIMS, maxViewportSize);
GLint maxRenderWidth = maxTexSize;
if (maxRenderWidth > maxViewportSize[0]) {
maxRenderWidth = maxViewportSize[0];
}
GLint maxRenderHeight = maxTexSize;
if (maxRenderHeight > maxViewportSize[1]) {
maxRenderHeight = maxViewportSize[1];
}
使用這些值,你可以創建一個大小maxRenderWidth x maxRenderHeight
的紋理,並把它作爲一個FBO附件。請記得在開始渲染之前將視口設置爲相同的大小。
我檢查了來自兩個不同主要供應商的GPU的幾個平板電腦的限制。在它們兩者上,最大紋理尺寸和最大視口尺寸都相同(一個是4096,另一個是8192)。如果這很常見,我不會感到驚訝,但它絕對不能被規範保證。
ES 2.0允許最大紋理尺寸小到64.但是您會發現在最近的任何事情上,限制都會大得多。 2048處於您在任何合理的當前GPU上看到的低端,並且4096/8192很常見。最大視口尺寸保證至少與顯示屏一樣大。
相關問題
- 1. Android OpenGLES渲染到紋理
- 2. iphone OpenGLES視頻紋理
- 3. GLKView和OpenGLES 1.1紋理?
- 4. opengles紋理單元行爲
- 5. OpenGLES 2.0紋理渲染
- 6. 在opengles中重構紋理
- 7. Threejs繪製紋理
- 8. 紋理不繪製
- 9. DirectX 10將紋理繪製到紋理
- 10. Android繪製紋理擴展繪製白色紋理
- 11. 如何使用Mono for Android在OpenGLES中正確加載和繪製紋理
- 12. Java openGL繪製紋理
- 13. OpenGL紋理沒有繪製?
- 14. TRIANGLE_FAN圓不繪製紋理
- 15. LibGDX紋理可繪製?
- 16. AndEngine紋理可繪製
- 17. Open GLES 2.0繪製紋理
- 18. LibGDX紋理不會繪製
- 19. OpenGL繪製多個紋理
- 20. 繪製紋理三角形
- 21. 使用D3D9繪製紋理
- 22. 從Opengles 1.0到Opengles 2.0的Android移植,紋理?
- 23. OpenglES 2.0 PNG阿爾法紋理重疊
- 24. 關於OpenGLES中的紋理開關
- 25. 在android中使用opengles切換紋理
- 26. OpenglES阿爾法紋理深度
- 27. OpenGLES:如何找到紋理大小
- 28. OpenGL:繪製FBO時的紋理處理
- 29. 確定Android OpenGLES中的最大/最小紋理大小限制
- 30. FBO:在繪製渲染紋理時渲染紋理,錯誤的紋理映射