Einzelnen Beitrag anzeigen

Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#2

Re: 2D-Bild (array of byte's) mit Direct3D darstellen

  Alt 22. Aug 2008, 14:17
ich habe es jetzt geschafft, ein 2D-Bild zu zeichnen, aber maxPrimitiveCount ist zu wenig, d.h. ich kann nur 65000 Points zeichnen.
Delphi-Quellcode:
// Lock the Vertex Buffer to get the pointer
  hRes := D3DVertexBuffer.Lock(0, dataSize, pBuffer,
                                    D3DLOCK_DISCARD or D3DLOCK_NOSYSLOCK);
  if (FAILED(hRes)) then
  begin
    result := E_FAIL;
    exit;
  end;

  // fill the buffer with the vertices
  copyMemory(pBuffer, @pixelList[0], dataSize);

  // Unlock the buffer
  if (FAILED(D3DVertexBuffer.Unlock())) then
  begin
    result := E_FAIL;
    exit;
  end;

  for i := 0 to high(pixelList) do
  begin
    pixelList[i].x := i mod SCREEN_WIDTH;
    pixelList[i].y := i div SCREEN_WIDTH;
    pixelList[i].z := 0.5;
    pixelList[i].rhw := 1.0;
    pixelList[i].color := data[i];
  end;

//[...]

D3DDevice.SetStreamSource(0, D3DVertexBuffer, sizeof(TPixel));
D3DDevice.SetVertexShader( POINT_FLAGS );
D3DDevice.DrawPrimitive(D3DPT_POINTLIST, 0, len); // wenn len>65000, dann zeichnet er nur noch schwarz ab der Stelle
Wie ist es möglich, mit einer älteren GraKa z.B. eine 400x250 Zeichenoberfläche pixelgenau zu zeichnen?
  Mit Zitat antworten Zitat