【发布时间】:2012-03-13 03:32:13
【问题描述】:
我正在开发一个 2D 游戏项目,我想将 openGl 纹理包装在一个简单的类中。使用 libpng 从 128x128px .png(带有 alpha 通道)读取纹理。由于代码量很大,所以我用的是pastebin。
代码文件:
- 纹理类:http://pastebin.com/gbGMEF2Z
- PngReader 类:http://pastebin.com/h6uP5Uc8(似乎工作正常,所以我删除了描述)。
- OpenGL代码:http://pastebin.com/PVhwnDif
为了避免浪费你的时间,我稍微解释一下代码:
纹理类:OpenGL 纹理的包装器。
loadData函数在 gl 中设置纹理(这是我怀疑不起作用的函数)。OpenGl 代码:
debugSetTexture函数将纹理放入temp变量中,该变量在graphicsDraw()函数中使用。这是因为它与main()不在同一个源文件中。在graphicsMainLoop()函数中,我使用了Fork()函数,它实际上调用了fork(),并存储了衍生进程的pid。
来自main(),我就是这样做的:
Strategy::IO::PngReader reader ("/cygdrive/c/Users/Tibi/Desktop/128x128.png");
reader.read();
grahpicsInit2D(&argc, argv);
debugSetTexture(reader.generateTexture());
graphicsMainLoop();
reader.close();
我尝试了一个名为 gDEBugger 的应用程序,在纹理查看器中,生成了一个纹理,但大小为 0x0px。
我怀疑问题是在使用 Texture::loadTexture() 加载纹理时发生的。
【问题讨论】:
-
你为什么使用 Cygwin?而你是在 Cygwin 环境下运行程序吗?
-
“我怀疑 Texture::loadData() 函数不起作用”...您是否尝试在 Texture 类之外的最小示例中对相同数据执行完全相同的操作?这行得通吗?
-
@AndiDog 这是Eclipse的配置方式...我没有安装mingw,也不确定windows上是否存在libpng。
-
@Bart 我不确定我是否理解您要告诉我的内容。请澄清。
-
那么第一件显而易见的事情就是尝试查看该文件是否存在于该路径下,或者它是否应该是“C:\Users\...”(或者为什么不使用相对路径?)。而且 libpng 应该可以与我假设的任何编译器一起编译,因为它是如此普遍。
标签: c++ opengl png 2d textures