2011-11-05 40 views
3

我正在嘗試加載遊戲的openGL紋理。紋理是從GIMP導出爲.C source file的圖像。當我#include這個文件在我的項目(使用Visual C++ 2010旗艦版),我得到一個編譯錯誤說fatal error C1091: compiler limit: string exceeds 65535 bytes in length從C源文件中加載圖像,從GIMP導出

任何解決方法嗎?

我希望將圖像導出爲C頭文件的原因是,這樣的程序與圖像編譯,並且我沒有提供raw圖像文件的可執行文件一起。

代碼:

#include <iostream> 
#include <Windows.h> 
#include <glfw.h> 
#include "X.c" 

#define X 1 
#define O 2 

#pragma comment(lib, "glfw.lib") 
#pragma comment(lib, "opengl32.lib") 
#pragma comment(lib, "gdi32.lib") 

using namespace std; 

float render(); 
void stepGame(float); 
void keyboard(int, int); 

int main(int argv, int *argc[]) 
{ 
    glfwInit(); 
    glfwOpenWindow(480, 480, 16, 16, 16, 16, 16, 16, GLFW_WINDOW); 
    glfwSetKeyCallback(keyboard); 
    glfwSetWindowTitle("Tic Tac Toe!"); 
    glClearColor(1.0, 1.0, 1.0, 1.0); 
    float dT; 

    while(glfwGetWindowParam(GLFW_OPENED) > 0) 
    { 
     glfwPollEvents(); 
     dT = render(); 
     stepGame(dT); 
    } 
    return 0; 
} 

圖像文件: X.c

回答

2

下面是一個替代的解決方案。將圖像導出爲原始數據文件,然後使用bin2hex將其轉換爲C/C++數組。這將正常工作,因爲這個腳本不是一個巨大的字符串,而是生成一個char數組。下面是一個例子:

$ bin2hex.pl 
bin2hex.pl by Chami.com 

usage: 
    perl bin2hex.pl <binary file> <language id> 

    <binary file> : path to the binary file 
    <language id> : 0 = Perl, 1 = C/C++/Java, 2 = Pascal/Delphi 

$ bin2hex.pl x.bin 1 

/* begin binary data: */ 
char bin_data[] = /* 112 */ 
{0x23,0x69,0x6E,0x63,0x6C,0x75,0x64,0x65,0x20,0x3C,0x73,0x74,0x64,0x69,0x6F 
,0x2E,0x68,0x3E,0x0A,0x23,0x69,0x6E,0x63,0x6C,0x75,0x64,0x65,0x20,0x3C,0x74 
,0x69,0x6D,0x65,0x2E,0x68,0x3E,0x0A,0x0A,0x69,0x6E,0x74,0x20,0x6D,0x61,0x69 
,0x6E,0x28,0x69,0x6E,0x74,0x20,0x61,0x72,0x67,0x63,0x2C,0x20,0x63,0x68,0x61 
,0x72,0x2A,0x20,0x61,0x72,0x67,0x76,0x5B,0x5D,0x29,0x0A,0x7B,0x0A,0x20,0x20 
,0x20,0x20,0x70,0x72,0x69,0x6E,0x74,0x66,0x28,0x22,0x25,0x64,0x5C,0x6E,0x22 
,0x2C,0x20,0x73,0x69,0x7A,0x65,0x6F,0x66,0x28,0x74,0x69,0x6D,0x65,0x5F,0x74 
,0x29,0x29,0x3B,0x0A,0x7D,0x0A,0x0A}; 
/* end binary data. size = 112 bytes */ 
+0

這會工作,但它是一個PERL腳本。沒有二進制文件或我可以使用的東西嗎? – viraj

+0

我下載了PERL,並轉換爲二進制文件,但現在OpenGl不會加載紋理。 – viraj

+0

您需要將原始圖像導出。任何其他格式都不起作用。 – Miguel

1

我提出在python更好gimp plug-in到圖像數據導出爲C代碼。隨意使用它或使其更好地定製使用。這些腳本可在github repository上找到。希望有所幫助。