2016-08-13 2 views
0

Я пытаюсь передать текстуру в свой шейдер, но когда униформа sampler2D, которую я устанавливаю для своей текстуры, имеет тот же контент, что и u_sampler2D, содержащий текущую текстуру, предоставленную OpenGL.LibGDX Проблемы с передачей текстур в shader

Вот как я установил форму (это в моем SpriteBatch начинает метод перед вызовом super.begin()):

texture.bind(); 
this.getShader().begin(); 
this.getShader().setUniformi("u_LightMap",0); 
this.getShader().setUniformf("u_camOffset", new Vector3(inputMethod.getCameraOffsetX(), inputMethod.getCameraOffsetY(), inputMethod.getZoom())); 
this.getShader().end(); 

Это мое тестирование шейдер:

precision mediump float; 

varying vec4 v_color; 
varying vec2 v_texCoord0; 

uniform vec4 gl_FragCoord; 
uniform sampler2D u_sampler2D; 
uniform sampler2D u_LightMap; 
uniform vec3 u_cam; 
uniform vec2 resolution; 
void main() { 
    vec4 lightColor = texture2D(u_LightMap, gl_FragCoord); 
    gl_FragColor = lightColor; 
} 

Где проблема? ~ BeefEX

+0

Вы никогда не устанавливали шейдер в SpriteBatch. Но если вы это сделаете, тогда у вас будет столкновение на блоке текстуры, поэтому лучше использовать, например. текстурный блок 1. Но это просто догадки, не видя фактического кода, нельзя сказать точно. – Xoppa

+0

Да, я настраиваю шейдер в методе запуска основного класса. И для номера текстуры я пробовал много чисел, вставляя константы из оболочки OpenGL. – BeefEX

+0

Ты не сказал, что пошло не так. Черная текстура? Вы уверены, что шейдер скомпилирован? Если ShaderProgram.pedantic верен, шейдер, как сейчас, может не скомпилироваться из-за неиспользованной униформы. – Tenfour04

ответ

0

Посмотрите на исходный код, который вы вызываете в super.begin(). Это привязывает текстуру спрайтов к той же самой единице, с которой вы связали другую текстуру, переписав ее. Привяжите свою настраиваемую текстуру к единице, а затем измените элемент активной текстуры GL на 0 до вызова супер.

+0

Ну, этот код из вики LibGDX, но я попробую. – BeefEX

Смежные вопросы