问题标签 [glteximage2d]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1212 浏览

opengl-es-2.0 - 如何正确使用 GL_HALF_FLOAT_OES 纹理?

我在 iPad 2 / 3 上使用 OpenGL ES 2.0。我想在创建纹理时使用 GL_FLOAT:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_FLOAT, rawData);

但问题是,如果您的支持扩展列表中没有显示 GL_OES_texture_float_linear,则使用 GL_FLOAT 时不支持 GL_LINEAR 作为 GL_TEXTURE_MAG_FILTER。(所有 iPad 都没有。)

但是我的扩展列表中确实有 GL_OES_texture_half_float_linear 。因此,使用半浮点纹理应该与线性插值一起使用。

问题是,将我的纹理创建切换为:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_HALF_FLOAT_OES, rawData);

当我运行应用程序时导致 EXC_BAD_ACCESS。(libGPUSupportMercury.dlylib'gpus_ReturnGuiltyForHardwareRestart)

自从使用 GL_FLOAT 调用数据后,我没有更改数据的格式。输入数据是否需要以某种方式更改为 HALF_FLOAT?如果是这样,怎么做?我不知道如何将输入浮点数分成两半。目前每个组件都是 GLfloat。

0 投票
2 回答
3957 浏览

opengl - 分辨率不兼容时如何捕获 glTexImage2D 错误?

我试图捕捉来自不兼容的图像纹理分辨率的错误

我不知道为什么 glTexImage2D 在 #1 分辨率下工作正常,而在 #2 分辨率下会出错。我无法提取它遵循的分辨率模式,这意味着某些分辨率工作正常,而另一些则不行。我不知道为什么。

现在的问题是,如果用户尝试创建分辨率不兼容的纹理,那么 OpenGL 应该会捕获错误,如果未创建纹理但 glTexImage2D 没有返回任何内容,我应该得到 0,因此我们无法为用户确定安全的内容。“不支持此分辨率,请勿使用。” 但问题是 OpenGL 没有捕捉到 glTexImage2D 错误。

在运行时执行期间

那么,有谁知道我怎么能捕捉到 glTexImage2D 错误。如果它给出错误,那么我会显示“不使用此图像,使用另一个图像”。并返回 0。

如何完成这个任务?我还考虑过仅以某些分辨率限制用户,但这不是解决方案。正确的 ?

0 投票
1 回答
1409 浏览

opengl - OpenGL 重复调用 glTexImage2D 和 alpha 混合

这更多是出于好奇而不是出于任何实际目的:OpenGL 规范中是否有任何内容表明glTexImage2D多次调用(例如,每帧一次)是非法的?我的意思是非法的,因为它可能会产生错误的结果,而不仅仅是效率低下(假设我不关心不使用glTexSubImage2D而不使用对性能的影响)。

我问的原因是,我在绘制重叠的纹理映射图元时注意到一些非常奇怪的伪影,这些图元使用部分透明的纹理,每帧加载一次glTexImage2D(见附图):几秒钟后(即,几百帧),屏幕上出现小的矩形黑色斑块(它们实际上在连续帧之间的黑色和正常之间翻转)。

神器

我在下面附上了我可以编写的最简单的示例代码,它显示了这个问题。

笔记:

  1. 我正在使用 SDL,但我在 wxWidgets 中看到了同样的情况,所以这不是 SDL 相关的问题。

  2. 如果我glTexSubImage2D对每一帧都使用(update = 1在 中使用createTexture),伪影就会消失。

  3. 如果我禁用混合,则不再有伪影。

  4. 我一直在 2010 年末的 MacBook Air 上对此进行测试,但我怀疑这是否特别相关。

0 投票
1 回答
687 浏览

python - Python从浮点数组到纹理

我需要从浮点矩阵([0..1])创建纹理。纹理应该显示一个灰色方块,但只显示一个白色矩形:(

我有这个代码:

谢谢!

0 投票
2 回答
1103 浏览

android - GLES20.glTexImage2D 使用 GL_LUMINANCE_ALPHA 加载的损坏数据

我正在使用 opengl ES2.0 在 Android 上渲染 16 位灰度数据。(我在着色器中处理 16 位到 8 位的动态范围缩放,16 位输入是强制性的,因为它是数据的传入格式。)分辨率为 640x512。

目前,我通过一次将 2 个像素推入 320x512 32 位 RGBA 纹理来完成这项工作。IE:

texture2D(thData, vTextureCoord)[0] 是像素i低字节,

texture2D(thData, vTextureCoord)[1] 是像素i高字节,

texture2D(thData, vTextureCoord)[2] 是像素i+1低字节,

texture2D(thData, vTextureCoord)[3] 是像素i+1高字节。

我能够从中重建数据,但我已经通过渲染到 640x512 缓冲区并使用 gl_FragCoord.x 和条件语句来确定是从通道 0,1 还是 2,3 绘制像素来重建原始分辨率。代码如下所示:

原则上这很好,但由于某种原因,我似乎正在交换一些列,我的猜测是它可能是舍入错误导致条件语句的结果不正确。

我想做的是首先使用 16 位全分辨率纹理来避免下采样,这看起来很简单;我刚刚更改了 glTexImage2D 代码:

但是,当我这样做时,我似乎在纹理中得到了奇怪的数据。texture2D(thData, vTextureCoord)[0]似乎是正确的,但texture2D(thData, vTextureCoord)[1]具有与元素 0 相同的数据,像素的高字节无处可见。

我在这里错过了什么吗?

或者任何人都可以提出另一种方法吗?

0 投票
1 回答
533 浏览

android - Android 4.2.2 上的 glTexImage2D 比 4.2.0 慢得多

我们最近将我们的 Android 设备从 4.2.0 升级到 4.2.2 才意识到现在一切都在疯狂地结结巴巴。

在 Android 4.2.0 或更低版本上,此调用大约需要15 毫秒

在 Android 4.2.2 上,相同的调用需要100 - 195 ms之间。到底发生了什么变化会导致这种情况?我们是跨多个设备进行测试的多个开发人员,并且都得到了这一点。我在更改日志中看不到任何会影响这一点的内容。我不知道如何从这里前进。

请注意,上述调用中的缓冲区是从 MediaCodec 返回的 ByteBuffer。

0 投票
1 回答
2246 浏览

c++ - 在执行 glTexImage2D 和 glTexSubImage2D 之前是否需要调用 glGenTextures 和 glBindTexture

嗨,我有 35 张图像要在显示器中绘制。我在 7X5 网格中绘制它。图片是从网上下载的。每次下载图像时,我都会尝试绘制全部 35 张图像。但其中一些尚未下载。所以我为他们画了一些默认的瓷砖。问题是每次下载图像时,我都会再次绘制以前绘制的图像。我想减少它。所以我在考虑做一些像Texture Atlas这样的东西。我正在尝试手动完成。我是通过制作一个大图像glTexImage2D并使用glTexSubImage2D.

我调用 35glTexSubImage2D将所有 35 个图像添加到一个大的glTexImage2D. 这里我只写了一个以便于解释。最后我做了

现在我感到困惑的是,我是否也需要为 35 次调用生成和绑定纹理 35 次glTexSubImage2D?或者只做一次就足够了。我不明白绑定纹理的实际问题与它有什么关系。谢谢。

0 投票
1 回答
1427 浏览

webgl - WebGL texImage2d:使用 rasterizeHTML.js 的 SECURITY_ERR

我正在使用 rasterizeHTML.js 创建一个表示网页 DOM 元素的画布(例如页面的屏幕截图),然后将其传递给 texImage2d,以便将此画布用作纹理。虽然它在 Firefox 21.0 中运行良好,但在其他浏览器(Chrome、Safari ..)中我收到以下错误:

有没有办法绕过安全策略?我想在本地使用它。我也尝试使用本地网络服务器(MAMP),因为我认为它可能是由于相同的来源策略,但错误是相同的......非常感谢!

0 投票
0 回答
858 浏览

opengl - glTexImage2D 给出 GL_INVALID_VALUE 因为宽度或高度不能表示为 2k + 2

我有一个从第一个 opengl 画布截取的屏幕截图,我需要在第二个 opengl 画布中绘制它。我使用以下方法截取了屏幕截图glReadPixels

第一个 opengl 画布有两个或多个图像,周围有一些线条和文本数据。我正在使用第二个 opengl 画布来显示图像与周围数据作为一个整体的平铺。我不想在第二个 opengl 画布中重新绘制相同的内容,因此想要截取屏幕截图并绘制屏幕截图的平铺部分在第二个画布中。

我还将拍摄的快照保存到一个完美的 jpg 文件中。

但是,当我需要使用 glTexImage2d 绘制像素数据时,问题就来了,因为所使用的 pageWidth 或 pageHeight 不能表示为 2K+ 2。因此错误为GL_INVALID_VALUE.

pageWidth 和 pageHeight 可以是任何值(小于GL_MAX_TEXTURE_SIZE),例如 240 X 600。那么我应该如何解决这个问题呢?

0 投票
2 回答
1846 浏览

c++ - GL_UNSIGNED_SHORT_5_6_5 未声明?

我在使用 SDL 库加载纹理时遇到问题。

通常我在 Linux 上编写程序,但我也尝试创建与 Visual Studio 兼容的代码。在 Linux 上一切正常,但在 Visual Studio 上,它在 glTexImage2D(...) 函数的“GL_UNSIGNED_SHORT_5_6_5”中崩溃。

以下是我受本教程启发的关于我想做的事情的一般想法:

错误是:

错误 C2065:“GL_UNSIGNED_SHORT_5_6_5”:未声明的标识符

是我尝试加载的图像,它被配置为带有 GIMP 2.8 的位图(8bit 5 6 5)

注意:当我取消注释 Linux 上不需要的#include < GL/gext.h >时,我收到上述消息:testTesxture.exe 中 0x00d1193f 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000014。

通常,如果我保存位图图像(例如使用绘画),我如何理解我必须放置的类型(GL_UNSIGNED_SHORT_5_6_5、GL_UNSIGNED_BYTE 等)?