Обычно я не работаю с низкоуровневыми привязками, так что это может быть что-то глупое, что я упускаю из виду, но я не знаю.
Когда я создаю текстуру из такого файла
public Texture ( List<byte> pixels, int width, int height ) {
handle = GL.GenTexture();
GL.TexParameter( TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat );
GL.TexParameter( TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat );
GL.TexParameter( TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest );
GL.TexParameter( TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear );
GL.TexImage2D( TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, pixels.ToArray() );
}
public void Use () {
GL.Enable( EnableCap.Texture2D );
GL.ActiveTexture( TextureUnit.Texture0 );
GL.BindTexture( TextureTarget.Texture2D, handle );
}
И затем визуализируйте это так:
public void Draw () {
GL.BindVertexArray( VAO );
//texture.Use();
shader.Use();
GL.DrawElements( PrimitiveType.Triangles, indices.Length, DrawElementsType.UnsignedInt, 0 );
}
Почти все работает нормально, пока я не загружу другую текстуру. (это делает все второй текстурой) Вернуться только к одной текстуре, когда я раскомментирую texture.Use();
Все мои треугольники становятся черными. Что здесь происходит?
Я проверил, какие значения дает GL.GenTexture();
, и это 1 и 2, в то время как единственный раз, когда текстура рендерится, дескриптор GL.BindTexture
равен 0. Установка его на 1 или 2 делает треугольники черными.
GL.Enable( EnableCap.Texture2D );
устарел, только для контекста профиля совместимости. Это бесполезно и излишне при использовании шейдерной программы, но это не вызывает проблемы. - person Rabbid76   schedule 01.04.2020