问题标签 [render-to-texture]

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 回答
1293 浏览

opengl - GLSL texelFetchOffset 适用于 isampler2D 但不适用于 usampler2D?

在片段着色器中,以下编译良好:

但是,以下内容无法编译:

OpenGL 4.2 驱动程序提供以下编译器错误消息:

错误 C1115: 无法找到兼容的重载函数 "texelFetchOffset(usampler2D, uvec2, int, uvec2)

这是用于 Quadro 5010M 的 Nvidia 的 Linux 驱动程序 290.* - 但我想知道我是否犯了(初学者)错误并且没有在这里以某种方式进行规范?

0 投票
2 回答
533 浏览

caching - 更新 CCTextureCache 纹理数据

在我的图库应用程序中,我经常异步加载图像,这些图像被转储到其文件名引用的 CCTextureCache 中。问题是,我需要屏蔽我的纹理——而且这种屏蔽实际上只需要进行一次,所以理想情况下,我认为最好的放置位置是在addImageAsync调用的选择器中。我必须通过添加一个布尔变量来修改 CCTexture,该变量会通知我特定纹理是否已被屏蔽,并且效果很好。

事实上,即使是屏蔽代码本身(按照 Ray 的屏蔽教程使用 CCRenderTexture 完成)在选择器代码中也能正常工作。我现在遇到的问题是,一旦我应用了我的遮罩逻辑,我就有了 CCRenderTexture.sprite.texture 并且我需要用这个更新的遮罩纹理更新我的 CCTextureCache 以便将来,任何其他 Sprite 或调用它引用指定的文件名将使用完全准备好的纹理。

如何更新 CCTextureCache 中的纹理数据?或者更具体地说,如何将现有的缓存纹理替换为存储在渲染纹理中的纹理?

我知道纹理本身(它们的数据)实际上存储在 OpenGL 中,而不是存储在 Cocos2D 类中;所以我想像删除带有缓存纹理名称(GLuint)的OpenGL纹理,然后将缓存纹理的名称(GLuint)设置为RenderTexture的sprite.texture的名称......但我' m 不知道如何实际实现这一点(opengl 代码、cocos2d 线程安全代码、更改 cctexturecache 的字典等)。

或者也许有一种更简单的方法可以在不改变 Cocos2D 的情况下进行处理(例如,利用 opengl 将纹理缓存引用的纹理替换为渲染纹理的纹理,然后让局部 RT 变量消失并自动清理?

0 投票
1 回答
318 浏览

android - GL11ExtensionPack 上的 ClassCaseException。在 OpenGL android 上渲染到纹理

我正在尝试渲染纹理(真的认为它会比这更容易!)

我找到了这个资源:这似乎正是我想要的

但是,在 GL11ExtensionPack gl11ep = (GL11ExtensionPack) gl; 上,我得到了 ClassCastException

谁能告诉我为什么?

通过删除修复的问题 setDebugFlags(GLSurfaceView.DEBUG_LOG_GL_CALLS);

但是,它仍然没有修改纹理。我修改了代码,所以它所做的只是清除绿色,所以纹理应该变成全绿色。这是 createFrameBuffer 方法。我真的不明白这里发生的一切:/

}

0 投票
1 回答
396 浏览

java - 渲染到纹理的问题 - 缩放问题(?)

我正在尝试让我的渲染到纹理工作。到目前为止,它完成了所有必要的 GL gubbins 来绘制纹理和所有内容 - 唯一的问题是它完全关闭了缩放。

我想我想将视口设置为纹理的大小,并将 gluOrtho2d(我将在纹理上绘制的方式)设置为 -halfwidth、halfwidth、-halfheight、halfheight。这意味着当绘制位置 0,0 时应该在中心。halfwdith,halfheight 的位置应该在右上角等。

我得到了非常奇怪的效果,似乎它没有以正确的比例绘制纹理 - 所以一切都被扭曲了,谁能建议我可能做错了什么?

谢谢

图片:

这是在任何纹理渲染之前的游戏。

图像1

这是在图 1 中显示的“竞技场”背景纹理上渲染“血迹”(目前是猪!)之后。请注意,原始纹理已经缩小到中间看不到(它的几个像素)和猪“血溅”以之字形跳跃,翻转纹理的中心并变得更小......

图2

(抱歉,没有足够的代表在帖子中发布图片!)

0 投票
1 回答
1530 浏览

opengl - OpenGL中的多个渲染目标与Cg

我正在尝试(徒劳地)使用 OpenGL 和 NVIDIA 的 Cg 着色器系统设置 MRT,最终目标是延迟渲染。我已经成功地为单个目标工作了着色器和渲染到纹理,但是一旦我尝试将一个对象渲染到多个渲染目标,它就无法显示在其中任何一个目标中。

我正在通过以下方式设置帧缓冲区对象:

我的着色器(使用返回的配置文件编译cgGLGetLatestProfile)是:

有没有人知道为什么这可能会失败?

0 投票
2 回答
1241 浏览

java - OpenGL渲染到纹理坐标

我希望能够渲染到纹理(用于着色器、字体),但我遇到了一个问题,即正确定位四边形(帧缓冲区本身做了它应该做的事情)。生成的(复制的)纹理在大多数情况下显示在左上角,其余部分被裁剪。这对于矩形纹理来说更糟,对方形纹理几乎没有影响(所以我碰巧几天都没有意识到这种行为)

示例代码:

示例图片:

在此处输入图像描述

上面是渲染的原始图像,在复制版本下面

我究竟做错了什么?


更新:现在看起来纹理被下采样了

在此处输入图像描述

0 投票
1 回答
18748 浏览

android - Framebuffer FBO渲染到纹理很慢,在Android上使用OpenGL ES 2.0,为什么?

我正在使用 opengl es 2.0 编写 Android 2d 游戏。在我将精灵绘制到后台缓冲区后,我将灯光绘制到 FBO 并尝试再次将其混合到后台缓冲区。当我将 FBO 绘制到帧缓冲区时,即使是没有任何颜色的透明,三星 Galaxy w 上的帧速率也会从 60 下降到 30(它有一个 adreno 205 作为 gpu)。我到处搜索并尝试了所有方法,即使我在场景中绘制了一个精灵并将一个透明的 FBO 纹理混合到帧速率下降的屏幕上。我在该手机上尝试了其他带有灯光效果的游戏,它们运行良好,几乎所有游戏在该手机上都很好,我相信他们也使用了帧缓冲区。在 Galaxy SII(mali 400 gpu)上运行良好,我对 opengl 很陌生,所以我相信我在某个地方犯了错误,我分享了我的代码。

我在表面创建时这样做过一次。不确定是否正确。我保留纹理和帧缓冲区 ID,以便在需要时切换到它们。我的绘图代码:

一切都在屏幕上正确渲染,但是当我绘制 FBO 纹理时性能就被破坏了。非常感谢您的帮助。我为此非常努力,但没有找到解决方案。

0 投票
1 回答
1063 浏览

c++ - 使用渲染到纹理的多通道着色

我正在尝试使用 OpenSceneGraph 实现多通道渲染方法。但是,我不完全确定我的问题是理论上的还是由于缺乏对 OSG 的应用知识。到目前为止,我已经通过使用正交投影渲染到纹理成功地实现了多通道着色,但我似乎无法使透视投影工作。

可能是我不太明白如何实现多通道着色。当然,我必须使用多通道着色器将整个场景预渲染为纹理,然后在最终渲染中使用该纹理。但是,我不是在谈论为场景中的每个对象创建单独的纹理,而是有效地捕获整个预渲染场景的屏幕截图。然后,仅从该纹理,将渲染效果应用于各个几何图形。

我假设这意味着我必须对顶点着色器中的每个几何图形进行额外的顶点坐标转换。也就是说,经过计算:

我需要更进一步并计算顶点的屏幕坐标,以便正确映射顶点(再次,假设纹理由场景的整个屏幕截图组成)。

如果我是正确的,那么我必须能够在与最终渲染中使用的视图相同的透视图中预渲染场景,而不是正交视图。这就是我遇到麻烦的地方。我可以让正交视图做我想做的事,但不是透视图。

我的方法正确吗?我能想象的唯一其他方法是将所有内容渲染到屏幕填充四边形(实际上,与转换为屏幕坐标相同),但这并不能减轻在预渲染阶段使用透视投影的需要.

想法?链接??

编辑:我还应该指出,在我成功的尝试中,我只使用了片段着色器。透视投影有效,但是,当然,我使用的屏幕对齐四边形是偏移而不是居中的。我添加了一个直通顶点着色器,一切都变成了空白。

0 投票
0 回答
199 浏览

android - 将(已经渲染的)屏幕的一部分作为纹理

我正在制作一个 android opengl es 2d 应用程序,并尝试将渲染屏幕的一部分用作广告牌的纹理。到目前为止,我在 glCopyTexSubImage 方面取得了部分成功——它只适用于某些手机。

我读到的所有地方都建议使用 frameBufferObject 渲染到纹理,但我不知道如何使用它,所以如果有人能帮我得到这个,我会非常感谢他们。

  1. 如果我使用绑定到纹理的 FBO,是否可以只渲染屏幕的一部分?如果没有,那是不是有点矫枉过正?(还有更多的工作纹理映射和移动纹理。纹理必须足够大,以便我不需要模糊的部分)

  2. 我需要获取应该渲染到屏幕上的东西的快照,这是否意味着我必须每帧渲染我的场景两次(一个用于我的纹理,另一个用于实际渲染)?我在这里错过了什么吗?

0 投票
1 回答
1431 浏览

hlsl - HLSL 多次通过模糊(RTT?)

我尝试建立一个复杂的水着色器(我从互联网上的一个例子中得到了水着色器)。现在我想添加一些功能,将图案网格混合到模糊的水中。Atm 水和模糊工作,但是当我尝试通过一些随机化来建立模糊效果时......我使用了很多着色器指令...... :(

我搜索了诸如“hlsl 多次传递”、“hlsl 渲染到纹理”、“没有纹理的 hlsl 多次传递”之类的主题,因为我没有现有的“地面”纹理。

我从法线贴图和环境贴图构建水,现在......是否有可能从第一次传递到第二次传递这个“整个贴图/纹理/着色器数据”?因为当我只执行两遍时,第一遍的颜色会被完全覆盖:(

我希望你们能理解我的问题并拥有您需要的所有信息。

如果你能帮助我就好了。

谢谢...