diff --git a/imanox-chroma-matting-opengl/imanox-chroma-matting-opengl.cbp b/imanox-chroma-matting-opengl/imanox-chroma-matting-opengl.cbp
new file mode 100644
index 0000000..56d6c8f
--- /dev/null
+++ b/imanox-chroma-matting-opengl/imanox-chroma-matting-opengl.cbp
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/imanox-chroma-matting-opengl/imanox-chroma-matting-opengl.depend b/imanox-chroma-matting-opengl/imanox-chroma-matting-opengl.depend
new file mode 100644
index 0000000..af8f84e
--- /dev/null
+++ b/imanox-chroma-matting-opengl/imanox-chroma-matting-opengl.depend
@@ -0,0 +1,12 @@
+# depslib dependency file v1.0
+1472543008 source:c:\users\sebastian\documents\git-repos\imanox-chroma-matting\imanox-chroma-matting-opengl\main.c
+
+
+
+1472553612 source:c:\users\sebastian\documents\git-repos\imanox-chroma-matting\imanox-chroma-matting-opengl\main.cpp
+
+
+
+
+
+
diff --git a/imanox-chroma-matting-opengl/imanox-chroma-matting-opengl.layout b/imanox-chroma-matting-opengl/imanox-chroma-matting-opengl.layout
new file mode 100644
index 0000000..f7595bc
--- /dev/null
+++ b/imanox-chroma-matting-opengl/imanox-chroma-matting-opengl.layout
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/imanox-chroma-matting-opengl/main.cpp b/imanox-chroma-matting-opengl/main.cpp
new file mode 100644
index 0000000..ef20d38
--- /dev/null
+++ b/imanox-chroma-matting-opengl/main.cpp
@@ -0,0 +1,301 @@
+#include
+#include
+#include
+#include
+#include
+#include
+
+using namespace std;
+
+LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
+void EnableOpenGL(HWND hwnd, HDC*, HGLRC*);
+void DisableOpenGL(HWND, HDC, HGLRC);
+
+
+int * loadJpg(const char* Name) {
+ unsigned char a, r, g, b;
+ int width, height;
+ struct jpeg_decompress_struct cinfo;
+ struct jpeg_error_mgr jerr;
+
+ FILE * infile; /* source file */
+ JSAMPARRAY pJpegBuffer; /* Output row buffer */
+ int row_stride; /* physical row width in output buffer */
+ if ((infile = fopen(Name, "rb")) == NULL) {
+ fprintf(stderr, "can't open %s\n", Name);
+ return 0;
+ }
+ cinfo.err = jpeg_std_error(&jerr);
+ jpeg_create_decompress(&cinfo);
+ jpeg_stdio_src(&cinfo, infile);
+ (void) jpeg_read_header(&cinfo, TRUE);
+ (void) jpeg_start_decompress(&cinfo);
+ width = cinfo.output_width;
+ height = cinfo.output_height;
+
+ unsigned char * pDummy = new unsigned char [width*height*4];
+ unsigned char * pTest = pDummy;
+ if (!pDummy) {
+ printf("NO MEM FOR JPEG CONVERT!\n");
+ return 0;
+ }
+ row_stride = width * cinfo.output_components;
+ pJpegBuffer = (*cinfo.mem->alloc_sarray)
+ ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
+
+ while (cinfo.output_scanline < cinfo.output_height) {
+ (void) jpeg_read_scanlines(&cinfo, pJpegBuffer, 1);
+ for (int x = 0; x < width; x++) {
+ a = 0; // alpha value is not supported on jpg
+ r = pJpegBuffer[0][cinfo.output_components * x];
+ if (cinfo.output_components > 2) {
+ g = pJpegBuffer[0][cinfo.output_components * x + 1];
+ b = pJpegBuffer[0][cinfo.output_components * x + 2];
+ } else {
+ g = r;
+ b = r;
+ }
+ *(pDummy++) = b;
+ *(pDummy++) = g;
+ *(pDummy++) = r;
+ *(pDummy++) = a;
+ }
+ }
+ fclose(infile);
+ (void) jpeg_finish_decompress(&cinfo);
+ jpeg_destroy_decompress(&cinfo);
+
+ /*BMap = (int*)pTest;
+ Height = height;
+ Width = width;
+ Depth = 32;*/
+ int * pJetze = (int*)pTest;
+ cout << width << endl;
+ return pJetze;
+}
+
+int WINAPI WinMain(HINSTANCE hInstance,
+ HINSTANCE hPrevInstance,
+ LPSTR lpCmdLine,
+ int nCmdShow)
+{
+ WNDCLASSEX wcex;
+ HWND hwnd;
+ HDC hDC;
+ HGLRC hRC;
+ MSG msg;
+ BOOL bQuit = FALSE;
+ float theta = 0.0f;
+
+ /* register window class */
+ wcex.cbSize = sizeof(WNDCLASSEX);
+ wcex.style = CS_OWNDC;
+ wcex.lpfnWndProc = WindowProc;
+ wcex.cbClsExtra = 0;
+ wcex.cbWndExtra = 0;
+ wcex.hInstance = hInstance;
+ wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
+ wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
+ wcex.lpszMenuName = NULL;
+ wcex.lpszClassName = "GLSample";
+ wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);;
+
+
+ int * pJetze = loadJpg("../img/foregrounds/2.jpeg");
+ cout << pJetze[0] << endl;
+ cout << pJetze[1] << endl;
+ cout << pJetze[2] << endl;
+ cout << pJetze[3] << endl;
+ cout << "Hello world!" << endl;
+ //glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 10, 10, 0, GL_RGBA8, GL_UNSIGNED_INT, pJetze);
+
+
+ if (!RegisterClassEx(&wcex))
+ return 0;
+
+ /* create main window */
+ hwnd = CreateWindowEx(0,
+ "GLSample",
+ "OpenGL Sample",
+ WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT,
+ CW_USEDEFAULT,
+ 256,
+ 256,
+ NULL,
+ NULL,
+ hInstance,
+ NULL);
+
+ ShowWindow(hwnd, nCmdShow);
+
+ /* enable OpenGL for the window */
+ EnableOpenGL(hwnd, &hDC, &hRC);
+
+ /* program main loop */
+ bool first = true;
+ while (!bQuit)
+ {
+ /* check for messages */
+ if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ /* handle or dispatch messages */
+ if (msg.message == WM_QUIT)
+ {
+ bQuit = TRUE;
+ }
+ else
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ }
+ else
+ {
+ if (first) {
+ first = false;
+
+
+ GLuint textureid;
+ glGenTextures(1, &textureid);
+ glBindTexture(GL_TEXTURE_2D, textureid);
+ // Black/white checkerboard
+ float pixels[] = {
+ 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f,
+ 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f
+ };
+ //glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_FLOAT, pixels);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 10, 10, 0, GL_RGBA8, GL_UNSIGNED_BYTE, pJetze);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+
+ glBindTexture(GL_TEXTURE_2D, textureid);
+ glBegin(GL_TRIANGLES);
+
+ glTexCoord2f(0, 0); glVertex3f( -2, 0, -2 );
+ glTexCoord2f(2, 0); glVertex3f( 2, 0, -2 );
+ glTexCoord2f(0, 2); glVertex3f( -2, 2, -2 );
+
+ glEnd();
+ SwapBuffers(hDC);
+
+ }
+ /* OpenGL animation code goes here */
+
+ //glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+ //glClear(GL_COLOR_BUFFER_BIT);
+
+ /*glBindTexture(GL_TEXTURE_2D, *pJetze);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 10, 10, 0, GL_RGBA8, GL_UNSIGNED_BYTE, &pJetze);
+
+ GLuint textures;
+ glGenTextures(1, &textures);
+ int width, height;
+ unsigned char* image;
+
+ //glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, textures);
+ //image = SOIL_load_image("sample.png", &width, &height, 0, SOIL_LOAD_RGB);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 10, 10, 0, GL_RGBA8,
+ GL_UNSIGNED_BYTE, pJetze);
+ //SOIL_free_image_data(image);
+ //glUniform1i(glGetUniformLocation(shaderProgram, "texKitten"), 0);
+
+ glPushMatrix();
+ glRotatef(theta, 0.0f, 0.0f, 1.0f);
+
+ glBegin(GL_TRIANGLES);
+
+ glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0f, 1.0f);
+ glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.87f, -0.5f);
+ glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(-0.87f, -0.5f);
+
+ glEnd();
+
+ glPopMatrix();
+
+ SwapBuffers(hDC);
+
+ theta += 1.0f;
+
+ Sleep (1);\**/
+ }
+ }
+
+ /* shutdown OpenGL */
+ DisableOpenGL(hwnd, hDC, hRC);
+
+ /* destroy the window explicitly */
+ DestroyWindow(hwnd);
+
+ return msg.wParam;
+}
+
+LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch (uMsg)
+ {
+ case WM_CLOSE:
+ PostQuitMessage(0);
+ break;
+
+ case WM_DESTROY:
+ return 0;
+
+ case WM_KEYDOWN:
+ {
+ switch (wParam)
+ {
+ case VK_ESCAPE:
+ PostQuitMessage(0);
+ break;
+ }
+ }
+ break;
+
+ default:
+ return DefWindowProc(hwnd, uMsg, wParam, lParam);
+ }
+
+ return 0;
+}
+
+void EnableOpenGL(HWND hwnd, HDC* hDC, HGLRC* hRC)
+{
+ PIXELFORMATDESCRIPTOR pfd;
+
+ int iFormat;
+
+ /* get the device context (DC) */
+ *hDC = GetDC(hwnd);
+
+ /* set the pixel format for the DC */
+ ZeroMemory(&pfd, sizeof(pfd));
+
+ pfd.nSize = sizeof(pfd);
+ pfd.nVersion = 1;
+ pfd.dwFlags = PFD_DRAW_TO_WINDOW |
+ PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
+ pfd.iPixelType = PFD_TYPE_RGBA;
+ pfd.cColorBits = 24;
+ pfd.cDepthBits = 16;
+ pfd.iLayerType = PFD_MAIN_PLANE;
+
+ iFormat = ChoosePixelFormat(*hDC, &pfd);
+
+ SetPixelFormat(*hDC, iFormat, &pfd);
+
+ /* create and enable the render context (RC) */
+ *hRC = wglCreateContext(*hDC);
+
+ wglMakeCurrent(*hDC, *hRC);
+}
+
+void DisableOpenGL (HWND hwnd, HDC hDC, HGLRC hRC)
+{
+ wglMakeCurrent(NULL, NULL);
+ wglDeleteContext(hRC);
+ ReleaseDC(hwnd, hDC);
+}
+
diff --git a/imanox-chroma-matting/imanox-chroma-matting.depend b/imanox-chroma-matting/imanox-chroma-matting.depend
index 9c2d6cc..eb0bebf 100644
--- a/imanox-chroma-matting/imanox-chroma-matting.depend
+++ b/imanox-chroma-matting/imanox-chroma-matting.depend
@@ -1,8 +1,8 @@
# depslib dependency file v1.0
-1472483353 source:c:\users\sebastian\documents\git-repos\imanox-chroma-matting\imanox-chroma-matting\main.cpp
+1472540761 source:c:\users\sebastian\documents\git-repos\imanox-chroma-matting\imanox-chroma-matting\main.cpp
- "C:\Program Files (x86)\GnuWin32\include\jpeglib.h"
+
1116160468 c:\program files (x86)\gnuwin32\include\jpeglib.h
"jconfig.h"
diff --git a/imanox-chroma-matting/imanox-chroma-matting.layout b/imanox-chroma-matting/imanox-chroma-matting.layout
index 0e5133e..874fe62 100644
--- a/imanox-chroma-matting/imanox-chroma-matting.layout
+++ b/imanox-chroma-matting/imanox-chroma-matting.layout
@@ -1,9 +1,9 @@
-
+
-
+
diff --git a/imanox-chroma-matting/main.cpp b/imanox-chroma-matting/main.cpp
index e880b1e..364a0ea 100644
--- a/imanox-chroma-matting/main.cpp
+++ b/imanox-chroma-matting/main.cpp
@@ -4,7 +4,7 @@
using namespace std;
-int loadJpg(const char* Name) {
+int * loadJpg(const char* Name) {
unsigned char a, r, g, b;
int width, height;
struct jpeg_decompress_struct cinfo;
@@ -61,13 +61,19 @@ int loadJpg(const char* Name) {
Height = height;
Width = width;
Depth = 32;*/
+ int * pJetze = (int*)pTest;
cout << width << endl;
+ return pJetze;
}
int main()
{
- loadJpg("../img/foregrounds/1.jpeg");
- cout << "Hello world!" << endl;
- return 0;
+ int * pJetze = loadJpg("../img/foregrounds/2.jpeg");
+ cout << pJetze[0] << endl;
+ cout << pJetze[1] << endl;
+ cout << pJetze[2] << endl;
+ cout << pJetze[3] << endl;
+ cout << "Hello world!" << endl;
+ return 0;
}
diff --git a/img/foregrounds/2.jpeg b/img/foregrounds/2.jpeg
new file mode 100644
index 0000000..770ed2b
Binary files /dev/null and b/img/foregrounds/2.jpeg differ
diff --git a/load-image-opengl/img/foregrounds/1.jpeg b/load-image-opengl/img/foregrounds/1.jpeg
new file mode 100644
index 0000000..dfd4d14
Binary files /dev/null and b/load-image-opengl/img/foregrounds/1.jpeg differ
diff --git a/load-image-opengl/img/foregrounds/2.jpeg b/load-image-opengl/img/foregrounds/2.jpeg
new file mode 100644
index 0000000..770ed2b
Binary files /dev/null and b/load-image-opengl/img/foregrounds/2.jpeg differ
diff --git a/load-image-opengl/load-image-opengl.cbp b/load-image-opengl/load-image-opengl.cbp
new file mode 100644
index 0000000..41e3661
--- /dev/null
+++ b/load-image-opengl/load-image-opengl.cbp
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/load-image-opengl/load-image-opengl.depend b/load-image-opengl/load-image-opengl.depend
new file mode 100644
index 0000000..ae08add
--- /dev/null
+++ b/load-image-opengl/load-image-opengl.depend
@@ -0,0 +1,9 @@
+# depslib dependency file v1.0
+1472655954 source:c:\users\sebastian\documents\git-repos\imanox-chroma-matting\load-image-opengl\main.cpp
+
+
+
+
+
+
+
diff --git a/load-image-opengl/main.cpp b/load-image-opengl/main.cpp
new file mode 100644
index 0000000..8331d79
--- /dev/null
+++ b/load-image-opengl/main.cpp
@@ -0,0 +1,339 @@
+#include
+#include
+#include
+#include
+#include
+#include
+using namespace std;
+
+LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
+void EnableOpenGL(HWND hwnd, HDC*, HGLRC*);
+void DisableOpenGL(HWND, HDC, HGLRC);
+GLuint LoadTexture(char *filename,int *textw,int *texth);
+void DrawTexture(int x, int y, GLuint textureid,int textw,int texth);
+int * loadJpg(const char* Name);
+
+
+int WINAPI WinMain(HINSTANCE hInstance,
+ HINSTANCE hPrevInstance,
+ LPSTR lpCmdLine,
+ int nCmdShow)
+{
+ WNDCLASSEX wcex;
+ HWND hwnd;
+ HDC hDC;
+ HGLRC hRC;
+ MSG msg;
+ BOOL bQuit = FALSE;
+ float theta = 0.0f;
+
+
+
+
+ /* register window class */
+ wcex.cbSize = sizeof(WNDCLASSEX);
+ wcex.style = CS_OWNDC;
+ wcex.lpfnWndProc = WindowProc;
+ wcex.cbClsExtra = 0;
+ wcex.cbWndExtra = 0;
+ wcex.hInstance = hInstance;
+ wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
+ wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
+ wcex.lpszMenuName = NULL;
+ wcex.lpszClassName = "GLSample";
+ wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);;
+
+
+ if (!RegisterClassEx(&wcex))
+ return 0;
+
+ /* create main window */
+ hwnd = CreateWindowEx(0,
+ "GLSample",
+ "OpenGL Sample",
+ WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT,
+ CW_USEDEFAULT,
+ 256,
+ 256,
+ NULL,
+ NULL,
+ hInstance,
+ NULL);
+
+ ShowWindow(hwnd, nCmdShow);
+
+ /* enable OpenGL for the window */
+ EnableOpenGL(hwnd, &hDC, &hRC);
+
+ /* program main loop */
+ while (!bQuit)
+ {
+ /* check for messages */
+ if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ /* handle or dispatch messages */
+ if (msg.message == WM_QUIT)
+ {
+ bQuit = TRUE;
+ }
+ else
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ }
+ else
+ {
+ /* OpenGL animation code goes here */
+
+ /*glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ glPushMatrix();
+ glRotatef(theta, 0.0f, 0.0f, 1.0f);
+
+ glBegin(GL_TRIANGLES);
+
+ glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0f, 1.0f);
+ glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.87f, -0.5f);
+ glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(-0.87f, -0.5f);
+
+ glEnd();
+
+ glPopMatrix();
+
+ SwapBuffers(hDC);
+
+ theta += 1.0f;*/
+
+
+ GLuint myglu;
+ int textw, texth;
+
+ string tmp = "img/foregrounds/2.jpeg";
+ char tab2[1024];
+ strncpy(tab2, tmp.c_str(), sizeof(tab2));
+ tab2[sizeof(tab2) - 1] = 0;
+
+
+ myglu=LoadTexture(tab2,&textw,&texth);
+ DrawTexture(100,100,myglu,textw,texth);
+
+ SwapBuffers(hDC);
+
+ Sleep (1);
+ }
+ }
+
+ /* shutdown OpenGL */
+ DisableOpenGL(hwnd, hDC, hRC);
+
+ /* destroy the window explicitly */
+ DestroyWindow(hwnd);
+
+ return msg.wParam;
+}
+
+LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch (uMsg)
+ {
+ case WM_CLOSE:
+ PostQuitMessage(0);
+ break;
+
+ case WM_DESTROY:
+ return 0;
+
+ case WM_KEYDOWN:
+ {
+ switch (wParam)
+ {
+ case VK_ESCAPE:
+ PostQuitMessage(0);
+ break;
+ }
+ }
+ break;
+
+ default:
+ return DefWindowProc(hwnd, uMsg, wParam, lParam);
+ }
+
+ return 0;
+}
+
+void EnableOpenGL(HWND hwnd, HDC* hDC, HGLRC* hRC)
+{
+ PIXELFORMATDESCRIPTOR pfd;
+
+ int iFormat;
+
+ /* get the device context (DC) */
+ *hDC = GetDC(hwnd);
+
+ /* set the pixel format for the DC */
+ ZeroMemory(&pfd, sizeof(pfd));
+
+ pfd.nSize = sizeof(pfd);
+ pfd.nVersion = 1;
+ pfd.dwFlags = PFD_DRAW_TO_WINDOW |
+ PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
+ pfd.iPixelType = PFD_TYPE_RGBA;
+ pfd.cColorBits = 24;
+ pfd.cDepthBits = 16;
+ pfd.iLayerType = PFD_MAIN_PLANE;
+
+ iFormat = ChoosePixelFormat(*hDC, &pfd);
+
+ SetPixelFormat(*hDC, iFormat, &pfd);
+
+ /* create and enable the render context (RC) */
+ *hRC = wglCreateContext(*hDC);
+
+ wglMakeCurrent(*hDC, *hRC);
+}
+
+void DisableOpenGL (HWND hwnd, HDC hDC, HGLRC hRC)
+{
+ wglMakeCurrent(NULL, NULL);
+ wglDeleteContext(hRC);
+ ReleaseDC(hwnd, hDC);
+}
+
+
+
+
+
+
+
+
+
+
+GLuint LoadTexture(char *filename,int *textw,int *texth) {
+
+ GLuint textureid;
+ int mode = GL_RGBA;
+
+ //surface = IMG_Load(filename);
+
+ int * pixels = loadJpg(filename);
+
+ *textw=10;
+ *texth=10;
+ // create one texture name
+ glGenTextures(1, &textureid);
+
+ // tell opengl to use the generated texture name
+ glBindTexture(GL_TEXTURE_2D, textureid);
+
+ // this reads from the sdl surface and puts it into an opengl texture
+ glTexImage2D(GL_TEXTURE_2D, 0, mode, 10, 10, 0, mode, GL_UNSIGNED_BYTE, pixels);
+
+ // these affect how this texture is drawn later on...
+ glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
+
+ return textureid;
+
+}
+
+
+
+void DrawTexture(int x, int y, GLuint textureid,int textw,int texth) {
+
+ //int textw,texth;
+ // tell opengl to use the generated texture name
+ glBindTexture(GL_TEXTURE_2D, textureid);
+ glEnable(GL_TEXTURE_2D);
+
+ // make a rectangle
+ glBegin(GL_QUADS);
+
+ // top left
+ glTexCoord2i(0, 0);
+ glVertex3f(x, y, 0);
+
+ // top right
+ glTexCoord2i(1, 0);
+ glVertex3f(x+textw, y, 0);
+
+ // bottom right
+ glTexCoord2i(1, 1);
+ glVertex3f(x+textw, y+texth, 0);
+
+ // bottom left
+ glTexCoord2i(0, 1);
+ glVertex3f(x, y+texth, 0);
+
+ glEnd();
+
+ glDisable(GL_TEXTURE_2D );
+}
+
+
+
+
+int * loadJpg(const char* Name) {
+ unsigned char a, r, g, b;
+ int width, height;
+ struct jpeg_decompress_struct cinfo;
+ struct jpeg_error_mgr jerr;
+
+ FILE * infile; /* source file */
+ JSAMPARRAY pJpegBuffer; /* Output row buffer */
+ int row_stride; /* physical row width in output buffer */
+ if ((infile = fopen(Name, "rb")) == NULL) {
+ fprintf(stderr, "can't open %s\n", Name);
+ return 0;
+ }
+ cinfo.err = jpeg_std_error(&jerr);
+ jpeg_create_decompress(&cinfo);
+ jpeg_stdio_src(&cinfo, infile);
+ (void) jpeg_read_header(&cinfo, TRUE);
+ (void) jpeg_start_decompress(&cinfo);
+ width = cinfo.output_width;
+ height = cinfo.output_height;
+
+ unsigned char * pDummy = new unsigned char [width*height*4];
+ unsigned char * pTest = pDummy;
+ if (!pDummy) {
+ printf("NO MEM FOR JPEG CONVERT!\n");
+ return 0;
+ }
+ row_stride = width * cinfo.output_components;
+ pJpegBuffer = (*cinfo.mem->alloc_sarray)
+ ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
+
+ while (cinfo.output_scanline < cinfo.output_height) {
+ (void) jpeg_read_scanlines(&cinfo, pJpegBuffer, 1);
+ for (int x = 0; x < width; x++) {
+ a = 0; // alpha value is not supported on jpg
+ r = pJpegBuffer[0][cinfo.output_components * x];
+ if (cinfo.output_components > 2) {
+ g = pJpegBuffer[0][cinfo.output_components * x + 1];
+ b = pJpegBuffer[0][cinfo.output_components * x + 2];
+ } else {
+ g = r;
+ b = r;
+ }
+ *(pDummy++) = b;
+ *(pDummy++) = g;
+ *(pDummy++) = r;
+ *(pDummy++) = a;
+ }
+ }
+ fclose(infile);
+ (void) jpeg_finish_decompress(&cinfo);
+ jpeg_destroy_decompress(&cinfo);
+
+ /*BMap = (int*)pTest;
+ Height = height;
+ Width = width;
+ Depth = 32;*/
+ int * pJetze = (int*)pTest;
+ cout << width << endl;
+ return pJetze;
+}