最终目标是能够在 JOGL 中渲染任意大小的图像,并在基本显卡上快速完成。
我最初的尝试是使用纹理来实现这一点。但是,我遇到了一些显卡(更准确地说是虚拟机显卡)的问题。
GL_MAX_TEXTURE_SIZE
如果卡不支持不是 2 的幂的纹理,则某些图像超过( gl.isNPOTTextureAvailable()
)
然后我跟踪了几个 (1, 2) 示例,这些示例使用 glDrawPixels 直接渲染图像。
gl.glBlendFunc (GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable (GL.GL_BLEND);
gl.glColor3f (0.0f, 0.0f, 0.0f);
gl.glRasterPos2i (10, 300);
gl.glDrawPixels (dukeWidth, dukeHeight,
gl.GL_RGBA, gl.GL_UNSIGNED_BYTE,
dukeRGBA);
这工作正常,除非光栅位置移动到视口之外。当图像的一部分(左下角)超出视口时,不会显示整个图像。
[1] https://today.java.net/pub/a/today/2003/09/11/jogl2d.html
我已经设法通过替换解决了图像消失的问题glRasterPos2i
,glWindowPos2d
但这又导致了另一个问题 -glWindowPos2d
仅受 openGL 1.4 支持,而我的虚拟机仅支持 1.1。
我的方法有什么问题?
我应该通过填充纹理来处理非功率大小的图像吗?
我是否应该将大图像分割成许多纹理(如被子)以使最大纹理大小不超过?在这种情况下担心性能。
尝试了 Mesa3D 以确保获得更高的 openGL 版本,但无法使其为 windows 编译。有其他推荐的软件渲染器吗?(等待 Swiftshader 支持)