Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jun 16, 2024 06:41

Foren-Übersicht » English » English Programming Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Nov 20, 2007 03:54 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 24, 2007 00:44
Beiträge: 144
Good morning...

It's a bit late, but I've been trying to work on this for a little while with no luck so far - so here we go. I'd like to put a black border around a texture I've loaded. My black border is nothing special - just 1 black pixel wide to show the texture has an edge to it. I thought I might do this via use of glTexSubImage2D but I'm not sure I'm heading down the right direction with that - anyway, as you'll see below - for my purposes, it is much the same as glTexImage2D. I thought if I had an existing texture of, say, 64 x 64 pixels and wanted to write a black border around it, I could use another image to lay over the top of it and give all the pixels in the middle a transparent alpha value - that didn't work, so I tried to turn on blending, but that didn't work anywhere close to what I expected. The code I have so far is below... it will run pretty simply I think - just press 1 to overlay the border image onto the existing image, and 2 to return to the original image... I would like to see my border and the original image sitting inside it. I wonder how that is possible? Can I use glDrawPixels to just draw simple rectangles for each of the four lines I want to draw... or should I have another border texture image, say an alpha TGA, that I load and overlay on top of the texture I am showing?

If there's an easy way to get this simple black border - and hopefully be able to remove it (but that is secondary I guess) it would be good to understand.

Code:
  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   OpenGL, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, ExtCtrls, ComCtrls, Textures;
  8.  
  9. const
  10.   CheckImageWidth = 63; { 64 - 1 for both. }
  11.   CheckImageHeight = 63;
  12.  
  13. type
  14.   TfrmMain = class(TForm)
  15.     Timer1 : TTimer;
  16.     pOGL : TPanel;
  17.     procedure FormCreate (Sender : TObject);
  18.     procedure Timer1Timer (Sender : TObject);
  19.     procedure FormKeyPress(Sender: TObject; var Key: Char);
  20.   private
  21.     procedure Draw;
  22.     procedure MakeImages;
  23.   public
  24.   end;
  25.  
  26. var
  27.   frmMain : TfrmMain;
  28.   CheckImage : array[0..CheckImageWidth,0..CheckImageHeight,0..3] of Byte;
  29.   BoxImage : array[0..CheckImageWidth,0..CheckImageHeight,0..3] of Byte;
  30.   TexName : GLUInt;
  31.  
  32.  
  33. implementation
  34.  
  35. uses
  36.   Math;
  37.  
  38. procedure glBindTexture (Target : GLEnum; Texture : GLUInt); stdcall; external OpenGL32;
  39. procedure glGenTextures (N : GLSizeI; var Textures : GLUInt); stdcall; external OpenGL32;
  40. procedure glTexSubImage2D (Target : GLEnum; Level, XOffset, YOffset : GLInt; Width, Height : GLSizeI; Format, AType: GLEnum; const Pixels : Pointer); stdcall; external OpenGL32;
  41.  
  42.  
  43. {$R *.DFM}
  44.  
  45.  
  46. procedure SetupPixelFormat ( DC : HDC
  47.                            );
  48. const
  49.    PFD : TPIXELFORMATDESCRIPTOR = (
  50.          nSize : SizeOf (TPIXELFORMATDESCRIPTOR); nVersion : 1;
  51.          dwFlags : PFD_SUPPORT_OPENGL or PFD_DRAW_TO_WINDOW or PFD_DOUBLEBUFFER;
  52.          iPixelType : PFD_TYPE_RGBA;
  53.          cColorBits : 24; cRedBits : 0; cRedShift : 0; cGreenBits : 0; cGreenShift : 0;
  54.          cBlueBits : 0; cBlueShift : 0; cAlphaBits : 0; cAlphaShift : 0; cAccumBits : 0;
  55.          cAccumRedBits : 0; cAccumGreenBits : 0; cAccumBlueBits : 0; cAccumAlphaBits : 0;
  56.          cDepthBits : 16; cStencilBits : 0; cAuxBuffers : 0; iLayerType : PFD_MAIN_PLANE;
  57.          bReserved : 0; dwLayerMask : 0; dwVisibleMask : 0; dwDamageMask : 0);
  58. var
  59.   PixelFormat : Integer;
  60. begin
  61.    PixelFormat := ChoosePixelFormat (DC,@PFD);
  62.    if (PixelFormat = 0) then
  63.    begin
  64.      Exit;
  65.    end;
  66.  
  67.    if (SetPixelFormat (DC,PixelFormat,@PFD) <> True) then
  68.    begin
  69.      Exit;
  70.    end;
  71. end;
  72.  
  73.  
  74. procedure TfrmMain.MakeImages;
  75. var
  76.   X, Y, C : Integer;
  77. begin
  78.   for X := 0 to CheckImageWidth do
  79.   begin
  80.     for Y := 0 to CheckImageHeight do
  81.     begin
  82.       C := ((IfThen ((X and <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) --> = 0,1,0)) xor (IfThen ((Y and <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) --> = 0,1,0))) * 255;
  83.       CheckImage[X][Y][0] := C;
  84.       CheckImage[X][Y][1] := C;
  85.       CheckImage[X][Y][2] := C;
  86.       CheckImage[X][Y][3] := 255;
  87.     end;
  88.   end;
  89.  
  90.   for X := 0 to CheckImageWidth do
  91.   begin
  92.     for Y := 0 to CheckImageHeight do
  93.     begin
  94.       if ((Y = 0) or (X = 0) or (X = CheckImageHeight) or (Y = CheckImageWidth)) then
  95.       begin
  96.         BoxImage[X][Y][0] := 0;
  97.         BoxImage[X][Y][1] := 0;
  98.         BoxImage[X][Y][2] := 0;
  99.         BoxImage[X][Y][3] := 255;
  100.       end else
  101.       begin
  102.         BoxImage[X][Y][0] := 255;
  103.         BoxImage[X][Y][1] := 255;
  104.         BoxImage[X][Y][2] := 255;
  105.         BoxImage[X][Y][3] := 0;
  106.       end;
  107.     end;
  108.   end;
  109. end;
  110.  
  111.  
  112. procedure TfrmMain.FormCreate ( Sender : TObject
  113.                               );
  114. var
  115.   DC : HDC;
  116.   RC : HGLRC;
  117. begin
  118.   DC := GetDC (pOGL.Handle);
  119.   SetupPixelFormat (DC);
  120.   RC := wglCreateContext (DC);
  121.   wglMakeCurrent (DC,RC);
  122.  
  123.   glShadeModel (GL_SMOOTH);
  124.   glDepthFunc (GL_LEQUAL);
  125.   glEnable (GL_DEPTH_TEST);
  126.   glClearColor (0.905,0.470,0.003,1);
  127.  
  128.   glMatrixMode (GL_PROJECTION);
  129.   glLoadIdentity;
  130.   gluPerspective (45,pOGL.Width / pOGL.Height,1,100);
  131.   glMatrixMode (GL_MODELVIEW);
  132.  
  133.   MakeImages;
  134.   glPixelStoreI (GL_UNPACK_ALIGNMENT,1);
  135.   glGenTextures (1,TexName);
  136.   glBindTexture (GL_TEXTURE_2D,TexName);
  137.   glTexParameterI (GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
  138.   glTexParameterI (GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
  139.   glTexParameterI (GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
  140.   glTexParameterI (GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
  141.   glTexImage2D (GL_TEXTURE_2D,0,GL_RGBA,CheckImageWidth + 1,CheckImageHeight + 1,0,GL_RGBA,GL_UNSIGNED_BYTE,@CheckImage);
  142.  
  143.   Caption := Caption + ', OpenGL Version: ' + glGetString (GL_VERSION);
  144. end;
  145.  
  146.  
  147. procedure TfrmMain.Draw;
  148. begin
  149.   glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  150.   glLoadIdentity;
  151.   glTranslatef (0,0,-4);
  152.  
  153.   glEnable (GL_TEXTURE_2D);
  154.  
  155.   glBegin (GL_QUADS);
  156.     glTexCoord2f (0,0); glVertex3f (-2,-1,0);
  157.     glTexCoord2f (0,1); glVertex3f (-2,1,0);
  158.     glTexCoord2f (1,1); glVertex3f (0,1,0);
  159.     glTexCoord2f (1,0); glVertex3f (0,-1,0);
  160.   glEnd;
  161.  
  162.   glBegin (GL_QUADS);
  163.     glTexCoord2f (0,0); glVertex3f (1,-1,0);
  164.     glTexCoord2f (0,1); glVertex3f (1,1,0);
  165.     glTexCoord2f (1,1); glVertex3f (2.4,1,-1.4);
  166.     glTexCoord2f (1,0); glVertex3f (2.4,-1,-1.4);
  167.   glEnd;
  168.  
  169.   glDisable (GL_TEXTURE_2D);
  170.  
  171.   SwapBuffers (wglGetCurrentDC);
  172. end;
  173.  
  174.  
  175. procedure TfrmMain.Timer1Timer ( Sender : TObject
  176.                                );
  177. begin
  178.   Draw;
  179. end;
  180.  
  181.  
  182. procedure TfrmMain.FormKeyPress ( Sender : TObject;
  183.                                   var Key : Char
  184.                                 );
  185. begin
  186.   if (Key = '1') then
  187.   begin
  188.     { These two lines are effectively the same, as I'm putting a box around the
  189.       image, not actually altering a subset rectangle of the image. }
  190.     glTexSubImage2D (GL_TEXTURE_2D,0,0,0,CheckImageWidth + 1,CheckImageHeight + 1,GL_RGBA,GL_UNSIGNED_BYTE,@BoxImage);
  191.     // glTexImage2D (GL_TEXTURE_2D,0,GL_RGBA,CheckImageWidth + 1,CheckImageHeight + 1,0,GL_RGBA,GL_UNSIGNED_BYTE,@BoxImage);
  192.   end else
  193.   if (Key = '2') then
  194.   begin
  195.     glTexImage2D (GL_TEXTURE_2D,0,GL_RGBA,CheckImageWidth + 1,CheckImageHeight + 1,0,GL_RGBA,GL_UNSIGNED_BYTE,@CheckImage);
  196.   end;
  197. end;
  198.  
  199.  
  200. end.

_________________
Cheers, DpM
http://www.hmusiccentre.org.uk


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 10:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
glTexSubImage can be used like glTexImage but you don't put an internal format and you had an offset. So you must shrink you image and put them into an empty texture. The texture should be filled with your border color and the alphavalue. I dosn't understood your code right and at this moment im still a bit sleepy. ;)

Or you choose the easiest way to create an border. Since OpenGL 1.3 there are the possibility to clamp to an border. Following steps you have to do. For the wrap modes you must set GL_CLAMP_TO_BORDER. Set an bordercolor with glTexParameterfv. And last but not least manipulate your texturecoordinates so that clamping will be used.
Code:
  1. var
  2.   BorderColor: array [0..3] of single;
  3. begin
  4.   // setup
  5.   BorderColor[0] := Red;
  6.   BorderColor[1] := Green;
  7.   BorderColor[2] := Blue;
  8.   BorderColor[3] := Alpha;
  9.   glTexParameterfv(Target, GL_TEXTURE_BORDER_COLOR, @BorderColor[0]);
  10.   glTexParameteri(Target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
  11.   glTexParameteri(Target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
  12.  
  13.   // drawing quad with larger coordinates than 0-1
  14.   a := (1 / FLena.Width) * 3;
  15.   glBegin(GL_QUADS);
  16.     glTexCoord2f(0 - a, 0 - a);    glVertex3f(-1,  1, 0);
  17.     glTexCoord2f(0 - a, 1 + a);    glVertex3f(-1, -1, 0);
  18.     glTexCoord2f(1 + a, 1 + a);    glVertex3f( 1, -1, 0);
  19.     glTexCoord2f(1 + a, 0 - a);    glVertex3f( 1,  1, 0);
  20.   glEnd;

This should "create" and border around the image without changing anything imagedata. You also can scale and transform the texture matrix so you don't have to change all the coordinates. But the parameters must be set to every texture.

And please notice that the texture wont be drawn 1:1. So if you draws the images acurate 1 texel to 1 pixel you must expand the quad by 1 pixel.

If this isn't looks nice enough it's may better you are creating an extra bordertexture and draw this over every image.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 10:04 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Why don't you just set border in glTexImage2D from 0 to 1? This should be the effect you want.
Or you use Lossy's way ;)

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 10:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 24, 2007 00:44
Beiträge: 144
I tried setting border from 0 to 1 in the glTexImage2D calls as that looked dead easy - but all I got then was a white square - could that be because I created my texture, rather than loaded it? I would suspect not. Guess, for me, it's not going to be as easy as that. I'll check out the GL_CLAMP_TO_BORDER next... see where I get with that.

So... using glDrawPixels onto the texture isn't a good idea?

_________________
Cheers, DpM
http://www.hmusiccentre.org.uk


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 10:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
I don't know why but i have tried the border property sometimes but i don't get it to work. They only switch my graphicscard into the software mode. So it's be quite "an bit" slow.

glDrawPixels only draws to the framebuffer. So you had to read it back from framebuffer to the texture. But i think this isn't really god.

An other way is to create the texture normally with glTexImage and "draws" the border with glSubTexImage. You only create an 1D array which contain your colors. The size of the width should be enough. And then you call glSubTexImage and overdraws the first line. Simple set position to (0, 0), width = width and height = 1. If you draws these array at position (0, 0) with width = 1 and height = height opengl use the same array downwards. So you are able to draws single lines. With 4 calls you have your border.

But you overwrite some of the image data and you can't control the size of the Border. If the texture has an size of 128 the border is 4 times larger than an texture with size of 512.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 11:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 24, 2007 00:44
Beiträge: 144
That works!

Thanks a lot.

Changed bits around, now reads:

Code:
  1.   Border : array[0..CheckImageWidth,0..0,0..3] of Byte;


Code:
  1.   for X := 0 to CheckImageWidth do
  2.   begin
  3.     Border[X][0][0] := 0;
  4.     Border[X][0][1] := 0;
  5.     Border[X][0][2] := 0;
  6.     Border[X][0][3] := 255;
  7.   end;


Code:
  1.     glTexSubImage2D (GL_TEXTURE_2D,0,0,0,CheckImageWidth + 1,1,GL_RGBA,GL_UNSIGNED_BYTE,@Border);
  2.     glTexSubImage2D (GL_TEXTURE_2D,0,0,CheckImageHeight,CheckImageWidth + 1,1,GL_RGBA,GL_UNSIGNED_BYTE,@Border);
  3.     glTexSubImage2D (GL_TEXTURE_2D,0,0,0,1,CheckImageHeight + 1,GL_RGBA,GL_UNSIGNED_BYTE,@Border);
  4.     glTexSubImage2D (GL_TEXTURE_2D,0,CheckImageWidth,0,1,CheckImageHeight + 1,GL_RGBA,GL_UNSIGNED_BYTE,@Border);
  5.  

...and I get a single pixel black border around the texture. Good stuff.

_________________
Cheers, DpM
http://www.hmusiccentre.org.uk


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 14:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 24, 2007 00:44
Beiträge: 144
OK, so I've now got a simple procedure for adding a 2-pixel border to a texture, and the results are OK:

Bild

With:

Code:
  1. procedure TfrmMain.BorderTexture ( Texture : GLUint;
  2.                                    Width, Height : Integer
  3.                                  );
  4. begin
  5.   glBindTexture (GL_TEXTURE_2D,Texture);
  6.   { Horizontal lines... }
  7.   glTexSubImage2D (GL_TEXTURE_2D,0,0,0,Width - 1,1,GL_RGBA,GL_UNSIGNED_BYTE,@B);
  8.   glTexSubImage2D (GL_TEXTURE_2D,0,0,Height - 1,Width - 1,1,GL_RGBA,GL_UNSIGNED_BYTE,@B);
  9.  
  10.   glTexSubImage2D (GL_TEXTURE_2D,0,0,1,Width - 1,1,GL_RGBA,GL_UNSIGNED_BYTE,@B);
  11.   glTexSubImage2D (GL_TEXTURE_2D,0,0,Height - 2,Width - 1,1,GL_RGBA,GL_UNSIGNED_BYTE,@B);
  12.  
  13.   { Vertical lines... }
  14.   glTexSubImage2D (GL_TEXTURE_2D,0,0,0,1,Height - 1,GL_RGBA,GL_UNSIGNED_BYTE,@B);
  15.   glTexSubImage2D (GL_TEXTURE_2D,0,Width - 1,0,1,Height - 1,GL_RGBA,GL_UNSIGNED_BYTE,@B);
  16.  
  17.   glTexSubImage2D (GL_TEXTURE_2D,0,1,0,1,Height - 1,GL_RGBA,GL_UNSIGNED_BYTE,@B);
  18.   glTexSubImage2D (GL_TEXTURE_2D,0,Width - 2,0,1,Height - 1,GL_RGBA,GL_UNSIGNED_BYTE,@B);
  19. end;

But I need to ask one of those probably simple questions again... assuming I don't (and I don't) always know the size of my image files on disk - sometimes they might be 256x256 pixels - often they are 300x300... sometimes they're not even square... but I know that OpenGL will them into PoT textures and they'll be square enough - how do I know how large to make my border?

I tested loading up some of my Artist Images - these are all 426x104 and to successfully put a black border around that texture I had to code for 512x128 - that's fine - it makes sense to me. So, my next question is about a square Album cover - when the files could be either 200x200, 256x256, 300x300 or 512x512 I know that OpenGL will make them either 256x256 or 512x512 - but how do I know which one to code for? Is there a test I can do of a texture to, say, find out its width and height in OpenGL?

I tried loading up a 200x180 image file... in OpenGL I'm guessing that gets scaled to PoT 256x256 and my BorderTexture procedure puts nothing on there because I am currently sending 512 and 512 into the Width and Height parameters. So - is there an easy way to figure out what PoT size my textures are?

_________________
Cheers, DpM
http://www.hmusiccentre.org.uk


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 15:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
You can query these (and many more) values with following code.
Code:
  1.   glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_WIDTH, @Width);
  2.   glGetTexLevelParameteriv(Target, 0, GL_TEXTURE_HEIGHT, @Height);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 16:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 24, 2007 00:44
Beiträge: 144
Great, thanks! This seems to work for all image sizes I have tested... 256x256, 512x512, 512x128 and, of course, the images on disk that are a variety of NPoT sizes - which OpenGL is automatically scaling to PoT textures for me. I'm not sure if it's the most efficient way of doing things, but it works and that's good enough for me right now.

Code:
  1. procedure TfrmMain.BorderTexture ( Texture : GLUint;
  2.                                    R, G, B, A : Byte
  3.                                  );
  4. var
  5.   Loop, TextureWidth, TextureHeight : Integer;
  6. begin
  7.   glBindTexture (GL_TEXTURE_2D,Texture);
  8.  
  9.   glGetTexLevelParameteriv (GL_TEXTURE_2D,0,GL_TEXTURE_WIDTH,@TextureWidth);
  10.   glGetTexLevelParameteriv (GL_TEXTURE_2D,0,GL_TEXTURE_HEIGHT,@TextureHeight);
  11.  
  12.   for Loop := 0 to IfThen (TextureWidth >= TextureHeight,TextureWidth,TextureHeight) do
  13.   begin
  14.     TextureBorder[Loop][0][0] := R;
  15.     TextureBorder[Loop][0][1] := G;
  16.     TextureBorder[Loop][0][2] := B;
  17.     TextureBorder[Loop][0][3] := A;
  18.   end;
  19.  
  20.   { Horizontal lines... }
  21.   glTexSubImage2D (GL_TEXTURE_2D,0,0,0,TextureWidth - 1,1,GL_RGBA,GL_UNSIGNED_BYTE,@TextureBorder);
  22.   glTexSubImage2D (GL_TEXTURE_2D,0,0,TextureHeight - 1,TextureWidth - 1,1,GL_RGBA,GL_UNSIGNED_BYTE,@TextureBorder);
  23.  
  24.   glTexSubImage2D (GL_TEXTURE_2D,0,0,1,TextureWidth - 1,1,GL_RGBA,GL_UNSIGNED_BYTE,@TextureBorder);
  25.   glTexSubImage2D (GL_TEXTURE_2D,0,0,TextureHeight - 2,TextureWidth - 1,1,GL_RGBA,GL_UNSIGNED_BYTE,@TextureBorder);
  26.  
  27.   { Vertical lines... }
  28.   glTexSubImage2D (GL_TEXTURE_2D,0,0,0,1,TextureHeight - 1,GL_RGBA,GL_UNSIGNED_BYTE,@TextureBorder);
  29.   glTexSubImage2D (GL_TEXTURE_2D,0,TextureWidth - 1,0,1,TextureHeight - 1,GL_RGBA,GL_UNSIGNED_BYTE,@TextureBorder);
  30.  
  31.   glTexSubImage2D (GL_TEXTURE_2D,0,1,0,1,TextureHeight - 1,GL_RGBA,GL_UNSIGNED_BYTE,@TextureBorder);
  32.   glTexSubImage2D (GL_TEXTURE_2D,0,TextureWidth - 2,0,1,TextureHeight - 1,GL_RGBA,GL_UNSIGNED_BYTE,@TextureBorder);
  33. end;

_________________
Cheers, DpM
http://www.hmusiccentre.org.uk


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » English » English Programming Forum


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.175s | 17 Queries | GZIP : On ]