Шейдеры GLSL [ч.2 - Добавление в игру] [upd: ч.2.5 - логирование ошибок]

Шейдеры GLSL [ч.2 - Добавление в игру] [upd: ч.2.5 - логирование ошибок]

2,505
81
397
GlStateManager.activeTextureUnit. Тут будет 1
Чо это? Я не очень шарю в майне, но по логике там должно быть что-то типа GlStateManager.activeTextureUnit - GL13.GL_TEXTURE0
Почему может выдавать:
Из-за чего угодно. После каждого своего гл метода чекай ошибку. А потому гугли этот метод в khronos'е и смотри из-за чего она.
 
2,505
81
397
Откуда берется единица вообще?
А еще я не знаю, что хранится в GlStateManager.activeTextureUnit. Либо там число от 0, либо от GL_TEXTURE0. Но предполагаю, что второе.
 

CumingSoon

Местный стендапер
1,634
12
269
Откуда берется единица вообще?
А еще я не знаю, что хранится в GlStateManager.activeTextureUnit. Либо там число от 0, либо от GL_TEXTURE0. Но предполагаю, что второе.
Да это идиотская константа от можанга, черт пойми для чего
 
4,045
63
645
Что на счет использования юниформы sampler2D? Например, если хочу работать с текущей текстурой в шейдере?
Попробовал так:
Scala:
GL20.glUseProgram(id)
val uniformID = GL20.glGetUniformLocation(id, "img")//она там uniform sampler2D img
GL20.glUniform1i(uniformID, GlStateManager.activeTextureUnit /*OpenGlHelper.defaultTexUnit - GL13.GL_TEXTURE0*/)
//GL33.glBindSampler(GlStateManager.activeTextureUnit, uniformID)
bindTexture(new ResourceLocation(...))
Эффект как будто не трогаю эту юниформу
Что я делаю неправильно?

Может я не понял вопроса, но активная текстура в шейдере это uniform sampler2D DiffuseSampler;...
Как бы она там уже есть.
 
7,099
324
1,509
4,045
63
645
Из-за чего угодно. После каждого своего гл метода чекай ошибку. А потому гугли этот метод в khronos'е и смотри из-за чего она.
Угу... Попробую. Но фишка в том, что у меня всё работает даже с этой ошибкой... И вылетает она только один раз при запуске игры... Это страшно или не оч?
 
4,045
63
645
Может кто-нибудь подсказать, в чём проблема?
Шейдеры крашат.
Код:
net.minecraftforge.fml.common.LoaderExceptionModCrash: Caught exception from Misty World (mist)
Caused by: org.lwjgl.opengl.OpenGLException: Invalid operation (1282)
at org.lwjgl.opengl.Util.checkGLError(Util.java:59)
at org.lwjgl.opengl.GL20.glGetShaderi(GL20.java:542)
at ru.liahim.mist.shader.ShaderProgram.createProgram(ShaderProgram.java:83)
at ru.liahim.mist.shader.ShaderProgram.initShaders(ShaderProgram.java:24)
at ru.liahim.mist.common.ClientProxy.preInit(ClientProxy.java:60)
at ru.liahim.mist.common.Mist.preInit(Mist.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)

83-я строка - это проверка на линковку if (GL20.glGetShaderi(program, GL20.GL_LINK_STATUS) == GL11.GL_FALSE)
Возможно его смущает GL20.GL_LINK_STATUS?
Но что вместо него нужно?
 
Сверху