gpt4 book ai didi

java - 使用多个 sampler2D 的 GLSL 着色器

转载 作者:行者123 更新时间:2023-11-29 05:29:35 24 4
gpt4 key购买 nike

我正在尝试开发一个使用两个 sampler2D 的 GLSL 着色器,但我遇到了一些问题。

片段着色器:

varying vec4 v_color;
varying vec2 v_texCoord0;
uniform sampler2D u_texture;
uniform sampler2D my_second_texture;
void main() {
vec4 original_color = texture2D(u_texture, v_texCoord0);
gl_FragColor = original_color;
}

此着色器应输出未更改的 u_texture。

绘图代码:

spritebatch.begin();

spritebatch.setShader(my_shader);
my_shader.setUniformi("my_second_texture", 1);
Gdx.gl20.glActiveTexture(1);
my_second_texture.bind(1); //Around here is where things go wrong, I think...
Gdx.gl20.glActiveTexture(0);

Gdx.gl.glClearColor(bg_color.r, bg_color.g, bg_color.b, bg_color.a);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
spritebatch.setTransformMatrix(new Matrix4());
spritebatch.setColor(1, 1, 1, 1);
spritebatch.draw(my_first_texture, -960, -540, 1920, 1080, 0, 0, 1920, 1080, false, true);

spritebatch.end();

屏幕上的结果是 my_second_texture 拉伸(stretch)到整个屏幕。预期结果是屏幕上显示未更改的 my_first_texture。(出于好奇:最终目标是调色板交换着色器。)

如何使用 GLSL 和 LibGDX 制作正确使用两个 sampler2D 的着色器?

最佳答案

参见 https://www.opengl.org/sdk/docs/man/xhtml/glActiveTexture.xml

texture must be one of GL_TEXTUREi

在实践中,您可以使用 GL10.GL_TEXTURE0 偏移您的单位,例如:Gdx.gl.glActiveTexture(GL10.GL_TEXTURE0 + unit);请注意,Texture#bind(int unit);(其中 unit 从零开始,因此不需要使用 GL10.GL_TEXTURE0 进行偏移)将使指定的单元处于 Activity 状态。您不必在调用 texture.bind(1); 之前调用 glActiveTexture

tl;博士:

...
spritebatch.setShader(my_shader);
my_second_texture.bind(1);
Gdx.gl.glActiveTexture(GL10.GL_TEXTURE0);
my_shader.setUniformi("my_second_texture", 1);
...

关于java - 使用多个 sampler2D 的 GLSL 着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21585069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com