|
|
Source code |
1 |
Texture my_sub_image(const Rect rect) { assert(rect !is null); /// Damit bleibt das gesamte Fenster weiß. /* glMatrixMode(GL_MODELVIEW_MATRIX); glLoadIdentity(); */ glViewport(0, 0, rect.width, rect.height); GLuint subId; glGenTextures(1, &subId); // Binden den Zieltextur glBindTexture(GL_TEXTURE_2D, subId); // Parameter der Zieltextur glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 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_GENERATE_MIPMAP, GL_TRUE); glTexImage2D(GL_TEXTURE_2D, 0, this._format, rect.width, rect.height, 0, this._format, GL_UNSIGNED_BYTE, null); // Quelltextur binden this.bind(); // Quelltextur zeichnen glBegin(GL_QUADS); // top left glTexCoord2i(0, 0); glVertex2f(0, 0); // top right glTexCoord2i(1, 0); glVertex2f(rect.width, 0); // bottom right glTexCoord2i(1, 1); glVertex2f(rect.width, rect.height); // bottom left glTexCoord2i(0, 1); glVertex2f(0, rect.height); glEnd(); // Zieltextur binden glBindTexture(GL_TEXTURE_2D, subId); // kopieren glCopyTexSubImage2D( GL_TEXTURE_2D, 0, rect.get_x(), rect.get_x(), // x, y 0, 0, rect.width, rect.height ); glViewport(0, 0, 400, 400); return new Texture(null, subId, this); }
|
|
|
Source code |
1 |
glMatrixMode(GL_MODELVIEW_MATRIX);glLoadIdentity(); |
|
|
C/C++ Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
Texture my_sub_image(const Rect rect) { assert(rect !is null); /// Damit bleibt das gesamte Fenster weiß. /* glMatrixMode(GL_MODELVIEW_MATRIX); glLoadIdentity(); */ glViewport(0, 0, rect.width, rect.height); GLuint subId; glGenTextures(1, &subId); // Binden den Zieltextur glBindTexture(GL_TEXTURE_2D, subId); // Parameter der Zieltextur glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 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_GENERATE_MIPMAP, GL_TRUE); glTexImage2D(GL_TEXTURE_2D, 0, this._format, rect.width, rect.height, 0, this._format, GL_UNSIGNED_BYTE, null); // Quelltextur binden this.bind(); // Quelltextur zeichnen glBegin(GL_QUADS); // top left glTexCoord2i(0, 0); glVertex2f(0, 0); // top right glTexCoord2i(1, 0); glVertex2f(rect.width, 0); // bottom right glTexCoord2i(1, 1); glVertex2f(rect.width, rect.height); // bottom left glTexCoord2i(0, 1); glVertex2f(0, rect.height); glEnd(); // Zieltextur binden glBindTexture(GL_TEXTURE_2D, subId); // kopieren glCopyTexSubImage2D( GL_TEXTURE_2D, 0, rect.get_x(), rect.get_x(), // x, y 0, 0, rect.width, rect.height ); glViewport(0, 0, 400, 400); return new Texture(null, subId, this); } |
This post has been edited 2 times, last edit by "Rushh0ur" (Jan 19th 2012, 12:29am)
|
|
C/C++ Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
glGenTextures(1, &texture[0]); // Create The first Texture // Typical Texture Generation Using Data From The Bitmap glBindTexture(GL_TEXTURE_2D, texture[0]); glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glGenTextures(1, &texture[1]); // Create The second Texture (SubTexture from) glBindTexture(GL_TEXTURE_2D, texture[1]); glTexImage2D(GL_TEXTURE_2D, 0, 3, 245, 95, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL /*TextureImage[0]->data*/); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // Render 2D Scene glEnable(GL_TEXTURE_2D); glDisable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0, 0, 256, 256); glMatrixMode(GL_PROJECTION); // Select The Projection Matrix glLoadIdentity(); // Reset The Projection Matrix glOrtho(0, 256, 0, 256, 1, -1); glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glLoadIdentity(); // Reset The Modelview Matrix glBindTexture(GL_TEXTURE_2D, texture[0]); // Render first Texture to Backbuffer glBegin(GL_QUADS); glColor3f(1,1,1); glTexCoord2f(0, 1); glVertex2f(0, 0); glTexCoord2f(1, 1); glVertex2f(0 + 256, 0); glTexCoord2f(1, 0); glVertex2f(0 + 256, 0 + 256); glTexCoord2f(0, 0); glVertex2f(0, 0 + 256); glEnd(); glEnable(GL_DEPTH_TEST); glBindTexture(GL_TEXTURE_2D, texture[1]); // Selekt second Texture and Copy Backbuffer glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 5, 30, 245, 95); //glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 245, 95, 0); |

Ich bekomme aber, wenn ich versuche deinen Code zu übernehmen, jetzt gar kein sichtbares Ergebnis mehr, mein Fenster ist komplett weiß: http://www.rswhite.de/code/index.php?q=0…b0de8eaaa1cc886|
|
Source code |
1 |
glCopyTexImage2D(GL_TEXTURE_2D, 0, this._format, 0, 0, w, h, 0); |
|
|
Source code |
1 |
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, -25, 25, w, h); |
|
|
C/C++ Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Texture subimage(const Rect rect) { assert(rect !is null); // Rechteck gülltig? GLuint SubTexture; glGenTextures(1, &SubTexture); // Texture erstellen (1) glBindTexture(GL_TEXTURE_2D, SubTexture); // Und Binden glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, rect.width, rect.height, 0, this._format, GL_UNSIGNED_BYTE, null); // Texture Dimensionen festlegen (this._format == GL_RGB[A]?) // Backbuffer rendern glEnable(GL_TEXTURE_2D); glDisable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0, 0, rect.width, rect.height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, rect.width, 0, rect.height, 1, -1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //glBindTexture(GL_TEXTURE_2D, this.textureid()); this.bind(); glBegin(GL_QUADS); glColor3f(1, 1, 1); glTexCoord2f(0, 1); glVertex2f(0, 0 + rect.height); glTexCoord2f(1, 1); glVertex2f(0 + rect.width, 0 + rect.height); glTexCoord2f(1, 0); glVertex2f(0 + rect.width, 0 ); glTexCoord2f(0, 0); glVertex2f(0, 0); glEnd(); glFlush(); // Teilrechteck auf neue Texture kopieren glBindTexture(GL_TEXTURE_2D, SubTexture); glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, rect.get_x(), rect.get_y(), rect.width, rect.height); return new Texture(null, SubTexture, this); } |
|
|
Source code |
1 |
Texture sub_image(const Rect rect) { assert(rect !is null); assert(this._pixels !is null); GLuint Screen; glGenTextures(1, &Screen); glBindTexture(GL_TEXTURE_2D, Screen); // Daten in den Speicher, Lineares Filtering aktivieren glTexImage2D(GL_TEXTURE_2D, 0, 4, rect.width, rect.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, null); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //glClearColor(0.0, 0.0, 0.0,0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBindTexture(GL_TEXTURE_2D, Screen); this.bind_anyway(); const ushort vp_w = Texture._window_width; const ushort vp_h = Texture._window_height; const float percent_x = cast(float)(vp_w) / this._width; const float percent_y = cast(float)(vp_h) / this._height; //glViewport(0, 0, vp_w, vp_h); glBegin(GL_QUADS); // top left glTexCoord2f(0, 0); glVertex2f(0, 0); // top right glTexCoord2f(1, 0); glVertex2f(vp_w, 0); // bottom right glTexCoord2f(1, 1); glVertex2f(vp_w, vp_h); // bottom left glTexCoord2f(0, 1); glVertex2f(0, vp_h); glEnd(); //glViewport(0, 0, this._width, this._height); glBindTexture(GL_TEXTURE_2D, Screen); glCopyTexImage2D( GL_TEXTURE_2D, 0, this._format, cast(uint)(rect.get_x() * percent_x), cast(uint)(rect.get_y() * percent_y), //rect.x, rect.y, rect.width, rect.height, 0 ); /+ // Zeichnen der Sub Textur glBindTexture(GL_TEXTURE_2D, Screen); /* const float tx = 300; const float ty = 100; */ glBegin(GL_QUADS); // top left glTexCoord2f(0, 0); glVertex2f(0, 0); // top right glTexCoord2f(1, 0); glVertex2f(rect.width, 0); // bottom right glTexCoord2f(1, 1); glVertex2f(rect.width, rect.height); // bottom left glTexCoord2f(0, 1); glVertex2f(0, rect.height); glEnd(); glDeleteTextures(1, &Screen); +/ // Löschen des Color-Buffers. Deaktiviert sieht man eine weitere Textur unten. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); return new Texture(rect, Screen, this); //return null;}
|