I'm currently trying to load two textures and apply them to a rectangle, following
this which is linked to from the README file of the bindbc OpenGL bindings.
I'm using Gamut to load the files, with the file:
module texture;
import gamut;
import bindbc.opengl;
import bindbc.glfw;
debug import std.stdio;
private __gshared Image[] _textures;
private __gshared char[][] texData;
public __gshared uint[] textures;
void newTexture(in string filename, out int width, out int hight, out int nrChannels)
{
auto k = ++_textures.length;
_textures[k-1].loadFromFile(filename);
if(_textures[k-1].isError)
throw new Exception(_textures[$-1].errorMessage.idup);
if(_textures[k-1].type != PixelType.rgb8 && _textures[k-1].type != PixelType.rgba8)
throw new Exception("invalid pixel type");
width = _textures[k-1].width;
hight = _textures[k-1].height;
nrChannels = 3; // May change later, we'll see
_textures[k-1].setSize(width, hight, _textures[k-1].type, LAYOUT_GAPLESS | LAYOUT_VERT_STRAIGHT);
auto u = ++texData.length;
texData[u-1] = cast(char[])_textures[k-1].allPixelsAtOnce;
debug writeln(texData[u-1]);
textures.length++;
glGenTextures(1, &textures[k-1]);
glBindTexture(GL_TEXTURE_2D, textures[k-1]);
// Set wrapping & filtering options
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// Bind the texture;
if(texData[u-1])
{
switch(_textures[k-1].type)
{
case PixelType.rgb8:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, hight, 0, GL_RGB, GL_UNSIGNED_BYTE, texData[u-1].ptr);
glGenerateMipmap(GL_TEXTURE_2D);
break;
case PixelType.rgba8:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, hight, 0, GL_RGBA, GL_UNSIGNED_BYTE, texData[u-1].ptr);
glGenerateMipmap(GL_TEXTURE_2D);
break;
default:
}
}
else
{
throw new Exception("Failed to load texture: " ~ filename);
}
_textures[k-1] = Image.init;
texData[u-1] = [][];
}
I presume that I am messing up with reading the pixels, but I don't see how.
Does LAYOUT_GAPLESS | LAYOUT_VERT_STRAGIHT really have that great of an effect?