From 56830353c131a4575c79d21eb11c065438c043dc Mon Sep 17 00:00:00 2001 From: Caesar2011 Date: Wed, 31 Aug 2016 16:18:49 +0200 Subject: [PATCH] First attempts of OpenGL --- .../imanox-chroma-matting-opengl.cbp | 52 +++ .../imanox-chroma-matting-opengl.depend | 12 + .../imanox-chroma-matting-opengl.layout | 9 + imanox-chroma-matting-opengl/main.cpp | 301 ++++++++++++++++ .../imanox-chroma-matting.depend | 4 +- .../imanox-chroma-matting.layout | 4 +- imanox-chroma-matting/main.cpp | 14 +- img/foregrounds/2.jpeg | Bin 0 -> 708 bytes load-image-opengl/img/foregrounds/1.jpeg | Bin 0 -> 16284 bytes load-image-opengl/img/foregrounds/2.jpeg | Bin 0 -> 708 bytes load-image-opengl/load-image-opengl.cbp | 49 +++ load-image-opengl/load-image-opengl.depend | 9 + load-image-opengl/main.cpp | 339 ++++++++++++++++++ 13 files changed, 785 insertions(+), 8 deletions(-) create mode 100644 imanox-chroma-matting-opengl/imanox-chroma-matting-opengl.cbp create mode 100644 imanox-chroma-matting-opengl/imanox-chroma-matting-opengl.depend create mode 100644 imanox-chroma-matting-opengl/imanox-chroma-matting-opengl.layout create mode 100644 imanox-chroma-matting-opengl/main.cpp create mode 100644 img/foregrounds/2.jpeg create mode 100644 load-image-opengl/img/foregrounds/1.jpeg create mode 100644 load-image-opengl/img/foregrounds/2.jpeg create mode 100644 load-image-opengl/load-image-opengl.cbp create mode 100644 load-image-opengl/load-image-opengl.depend create mode 100644 load-image-opengl/main.cpp 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 0000000000000000000000000000000000000000..770ed2b7109032c8efc79db9b0370dccae659f89 GIT binary patch literal 708 zcmex= zRY=j$kxe)-kzJ`!#HexNLJno8jR!@8E`CrkPAY2R|V^&07y2J$~}^+4C1KUw!=a z`ODXD-+%o41@ado12e>1aG#<1OAzQUCSV+}u!H=?$W#u*%z`YeiiT`Lj)Clng~Cck zjT|CQ6Blkg$f;}`^g%SK=pvVxipfLOk07sseMX$en#l4Q++zrT-D2QjW&}navmk># z!_P^_j=zb|NZWBmKTkjJo&LLZ>))sC-L+@Oy!3gQOJ}8Js!Z}sDNid?nWi#pUYGWV qNWY-TQ|8{bzd6TDs!y(`;77#@Cr*u{Kvj_{(>hfbdAs!gzX<>~H0OT+ literal 0 HcmV?d00001 diff --git a/load-image-opengl/img/foregrounds/1.jpeg b/load-image-opengl/img/foregrounds/1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..dfd4d14fbbd915a0628191304e72ba63ad08eeb6 GIT binary patch literal 16284 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 bHk4eyfLfSnUSb$U?63R(+lG#cH2OaP`d3o> literal 0 HcmV?d00001 diff --git a/load-image-opengl/img/foregrounds/2.jpeg b/load-image-opengl/img/foregrounds/2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..770ed2b7109032c8efc79db9b0370dccae659f89 GIT binary patch literal 708 zcmex= zRY=j$kxe)-kzJ`!#HexNLJno8jR!@8E`CrkPAY2R|V^&07y2J$~}^+4C1KUw!=a z`ODXD-+%o41@ado12e>1aG#<1OAzQUCSV+}u!H=?$W#u*%z`YeiiT`Lj)Clng~Cck zjT|CQ6Blkg$f;}`^g%SK=pvVxipfLOk07sseMX$en#l4Q++zrT-D2QjW&}navmk># z!_P^_j=zb|NZWBmKTkjJo&LLZ>))sC-L+@Oy!3gQOJ}8Js!Z}sDNid?nWi#pUYGWV qNWY-TQ|8{bzd6TDs!y(`;77#@Cr*u{Kvj_{(>hfbdAs!gzX<>~H0OT+ literal 0 HcmV?d00001 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; +}