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

Aktuelle Zeit: Mi Jul 09, 2025 00:06

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Anzeigefehler mit 1024*1024 Textur
BeitragVerfasst: Mo Mär 22, 2004 17:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Ich rendere für den Boden meines Programmes eine Textur welche zimlich groß sein sollte. Leider funktioniert es ab 512*512 Pixel nicht mehr.
Wenn ich eine 1024*1024 Textur nehme, ist ein Teil der Textur schwarz.
Die Textur hat übrigens keinen Alpha-Channel.
Habt ihr eine Idee was ich da machen kann?
Und woran liegt es ?
  • an meiner Grafikkarte (Geforce 2MX 400)
  • daran das ich 1 MB Arbeisspeicher in einem Stück haben möchte
  • an falscher OpenGL-Einstellung
  • Das es in OpenGL nicht möglich ist
MfG
IFlo
[/list]

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 23, 2004 12:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
IFlo hat geschrieben:
an meiner Grafikkarte (Geforce 2MX 400)

Nein, die kann sogar 4kx4k Texturen laden.

IFlo hat geschrieben:
daran das ich 1 MB Arbeisspeicher in einem Stück haben möchte

Daran kanns auch nicht liegen, denn wenn Delphi dir wirklich mal nicht genug Speicher geben kann, dann gibts normalerweise ne EOutOfMemory-Exception.

IFlo hat geschrieben:
an falscher OpenGL-Einstellung

Auch hier ein klares Nein. Im Bezug auf Texturgrößen wird OpenGL durch keine Einstellungen beschränkt, sondernn nur durch die Hardware.

IFlo hat geschrieben:
Das es in OpenGL nicht möglich ist

Auch negativ. Wie oben gesagt limitiert nur die Hardware. Selbst 32kx32k-Texturen sind mit passender HW machbar.

Ich schätze also mal ganz einfach dass es ein Problem in deinem Texturenloader ist.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 23, 2004 13:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Was meinst du eigentlich genau mit ein Teil der Textur? Kannst du davon evtl. mal ein Bild posten? Aber ich vermute auch, dass es irgendwie an dem Loader liegt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 23, 2004 15:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Hier die Procedure mit der ich die Textur erzeuge (abgeleitet aus dem RendertoTexture Tutorial)
Code:
  1.  
  2. procedure CreateEmptyTexture(var Texture:GLuint;const Width,Height:Word;const Alpha:Boolean);
  3. var
  4.   pTexData: Pointer;
  5. begin
  6.  // Speicher reservieren
  7.  if Alpha then
  8.   GetMem(ptexData, Width*Height*4)
  9.  else
  10.   GetMem(ptexData, Width*Height*3);
  11.  
  12.  // Textur generieren und drauf zeigen
  13.  glGenTextures(1, Texture);
  14.  glBindTexture(GL_TEXTURE_2D, Texture);
  15.  
  16.  // Daten in den Speicher, Lineares Filtering aktivieren
  17.  if Alpha then
  18.   glTexImage2D(GL_TEXTURE_2D, 0, 3, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pTexData)
  19.  else
  20.   glTexImage2D(GL_TEXTURE_2D, 0, 3, Width, Height, 0, GL_RGB, GL_UNSIGNED_BYTE, pTexData);
  21.  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  22.  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  23.  
  24.  // Freigeben
  25.  FreeMem(pTexData);
  26. end;
  27.  

Und hier ein ein Vergleich zwischen einer 512*512 und einer 1024*1024 Textur.

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 23, 2004 16:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ah. na klar. Das was du dort siehst ist dein Renderfenster. Bei 512 höhe geht es. Wenn dein Fenster 800x600 ist, dann kannst du logischerweise nicht über das Fenster hinweg kopieren.

Für deinen Fall musst du das Bild zerschneiden. Also, dass du 4 Mal 512x512 Bilder renderst und die dann einzeln an die Stellen wo sie hin müssen kopierst. Du wirst übrigens einen temporären Buffer erzeugen müssen und das Bild erst einmal dahin kopieren müssen. Allerdings das von da in den richtigen Buffer zu kopieren sollte kein Problem sein. Es gab irgendwo auf delphi3d.net ein Beispiel in welchem das gemacht wurde. Nur noch ein wenig größer als bei dir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 23, 2004 17:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Genau. Ich habe es gerade doch noch gefunden. Auf dieser Seite und dann ziemlich genau in der Mitte. Das ganze schimpft sich Hiresshot.zip. Da macht er so etwas.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 23, 2004 20:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Danke Lossy eX, jetzt wo du es sagst fällt mir es auch auf.
Ich gerne noch wissen ob es vom Rechenaufwand viel ausmachen wüde sehr viele kleine Bilder (ca 1000) statt dem großen zu nehmen?(das war Plan B :wink: )
MfG
IFlo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 23, 2004 20:13 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Verzichte für sowas am besten auf normales glCopyTexImage und schau dir mal Pixelpuffer an, die die von dir angetroffene Einschränkung nicht haben. Bei einem PBuffer hast du einen eigenen Kontext, und kannst die Textur in die du rendern willst so groß machen wie die maximale Viewport-Größe deiner Grafikkarte (4096x4096).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 23, 2004 20:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Son of Satan hat geschrieben:
(also wenn du nen Viewport von 640x480 hast und ne 1024x1024-Textur, ist alles jenseits von 640x480 undefiniert)

Ach :idea: das hast du damit gemeint. du hättest vielleicht noch sagen sollen das der Viewport größenbeschrenkt ist. :wink:
Son of Satan hat geschrieben:
und schau dir mal Pixelpuffer an

Son of Satan hat geschrieben:
und zum PBuffer gibts sowohl von ATI als auch von NVidia ausführliche Dokumente.

Kennst du vielleicht nicht zufällig ein Tutorial oder Link zu dem Thema?
Oder wie informiere ich mich am besten über PBuffer?
MfG
IFlo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 23, 2004 20:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das Dokument von ATI nennt sich ATIpbuffer.pdf und trägt den Titel Rendering to an off-screen buffer with WGL_ARB_pbuffer, das Pendant von NVidia nenn sich PixelBuffers.pdf und trägt den Titel Using P-Buffers for Off-Screen Rendering in OpenGL. Dürften anhand der Angaben beide einfach zu finden sein.
Alle zwei Dokumente sind derart ausführlich, dass man sich dass Lesen eines Tutorials zum Thema PBuffer gleich sparen kann. Sogar alle nötigen Quellcodeschnippsel (z.B. Erstellen des PBuffers) sind da drinne.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 23, 2004 20:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Danke, jetzt werde ich es erst mal das gefundene durcharbeiten.
MfG
IFlo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 25, 2004 18:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Wenn ich zuerst bei euch gesucht hätte(und nicht bei Google) dann hätte ich erst das hier entdeckt:
viewtopic.php?t=944&highlight=pbuffer
viewtopic.php?t=475&highlight=pbuffer
Und wäre auf diesen Link gestoßen:
http://www.delphi3d.net/download/pbuffer.zip
Na, ja egal ist trotzdem zimlich interessant das zu übersetzen.
Ich wüde aber gerne noch wissen was die Werte von den Konstanten:
  • WGL_TEXTURE_FORMAT_ARB
  • WGL_TEXTURE_RGBA_ARB
  • WGL_TEXTURE_TARGET_ARB
  • WGL_TEXTURE_2D_ARB
  • GL_CLAMP_TO_EDGE_EXT

Und woher erhalte ich diese Funktion/Procedure:
Code:
  1.  
  2. pbufferDestroy();
  3.  

Bisher habe ich schon das fertig:
Code:
  1.  
  2. unit PBufferUnit;
  3.  
  4. interface
  5. implementation
  6. uses WINDOWS,sysutils,OpenGL12,globaleVariablen;
  7. var
  8.   // handle, device context and render context for pbuffer buffer
  9.   pbufferWidth:Integer = 0;
  10.   pbufferHeight:Integer = 0;
  11.   // texture object ID for binding pbuffer to a texture
  12.   hPBufferDC: HDC;
  13.   hPBufferRC :HGLRC;
  14.   // texture object ID for binding pbuffer to a texture
  15.   pbufferTextureID : GLuint= 0;
  16.   // allows us to foolproof the interface to prevent using the pbuffer before
  17.   // it is initialized
  18.   // pbufferInitialized :Bool= false;
  19.  
  20.   h_GLDC:HDC;
  21.   h_GLRC:HGLRC;
  22.   hPBuffer:HPBUFFERARB;
  23.  
  24.  
  25. function pbufferInit (width,height:Integer):Boolean;
  26. const
  27.  MAX_ATTRIBS =6;
  28.  MAX_pATTRIBS=4;
  29. var
  30.   count:integer;
  31.   pixelFormat:integer;
  32.   attr:array [0..2*MAX_ATTRIBS] of Integer;
  33.   I:Integer;
  34.   pAttrib: array [0..MAX_pATTRIBS]of integer;
  35. begin
  36.  result := false;
  37.  
  38.  //if (pbufferInitialized) then  pbufferDestroy();
  39.  
  40.  // keep track of the pbuffer size incase we have to create a new one
  41.  // because of a display mode change.
  42.  pbufferWidth := width;
  43.  pbufferHeight := height;
  44.  
  45.  // get the current opengl device and render context
  46.  h_GLDC := glWindow.DC; //wglGetCurrentDC();
  47.  h_GLRC := glWindow.RC;  //wglGetCurrentContext();
  48.  
  49.  if (h_GLDC = 0) then
  50.  begin
  51.   Exception.create('Error: unable to get GL Device Context');
  52.   exit;
  53.  end;
  54.  if (h_GLRC = 0) then
  55.  begin
  56.   Exception.create('Error: unable to get GL Render Context');
  57.   exit;
  58.  end;
  59.  // Since we are trying to create a pbuffer, the pixel format we
  60.  // request (and subsequently use) must be “p-buffer capable”.
  61.  I := 0;
  62.  Attr[I+0] :=  WGL_DRAW_TO_PBUFFER_ARB;
  63.  Attr[I+1] :=  1; //true
  64.  Inc(I,2);
  65.  // We require a minimum of 24-bit depth.
  66.  Attr[I+0] :=  WGL_DEPTH_BITS_ARB;
  67.  Attr[I+1] :=  24;
  68.  Inc(I,2);
  69.  // We require a minimum of 8-bits for each R, G, B, and A.
  70.  Attr[I+0] :=  WGL_RED_BITS_ARB;
  71.  Attr[I+1] :=  8;
  72.  Inc(I,2);
  73.  Attr[I+0] :=  WGL_GREEN_BITS_ARB;
  74.  Attr[I+1] :=  8;
  75.  Inc(I,2);
  76.  Attr[I+0] :=  WGL_BLUE_BITS_ARB;
  77.  Attr[I+1] :=  8;
  78.  Inc(I,2);
  79.  // zero terminates the list
  80.  Attr[I+0] := 0;
  81.  
  82.  count := 0;
  83.  wglChoosePixelFormatARB(h_GLDC,@Attr,nil,1,@PixelFormat,@count);
  84.  
  85.  if (count = 0) then
  86.  begin
  87.   Exception.create('P-buffer Error: Unable to find an acceptable pixel format');
  88.   exit;
  89.  end;
  90.  
  91.  // set some pbuffer attributes so that we can use this pbuffer as a
  92.  // 2D RGBA texture target
  93.  pAttrib[0] := WGL_TEXTURE_FORMAT_ARB;// our pbuffer will have texture format RGBA
  94.  pAttrib[1] := WGL_TEXTURE_RGBA_ARB;
  95.  pAttrib[2] := WGL_TEXTURE_TARGET_ARB;  // of texture type GL_TEXTURE_2D
  96.  pAttrib[3] := WGL_TEXTURE_2D_ARB;
  97.  pAttrib[4] := 0; // zero terminates the list
  98.  
  99.  // allocate the pbuffer
  100.  hPBuffer := wglCreatePbufferARB(h_GLDC, pixelFormat, width, height, @pAttrib);
  101.  hPBufferDC := wglGetPbufferDCARB(hPBuffer);
  102.  hPBufferRC := wglCreateContext(hPBufferDC);
  103.  
  104.  if hPBuffer = 0 then
  105.  begin
  106.   Exception.create('P-buffer Error: Unable to create P-buffer');
  107.   exit;
  108.  end;
  109.  
  110.  // make a texture object for binding the pbuffer to
  111.  glGenTextures(1, @pbufferTextureID);
  112.  glBindTexture(GL_TEXTURE_2D, pbufferTextureID);
  113.  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE_EXT);
  114.  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE_EXT);
  115.  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  116.  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  117.  //pbufferInitialized = true;
  118.  
  119.  result:= true;
  120. end;
  121. end.
  122.  

MfG
IFlo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]