fungsi glDrawPixels

Fungsi glDrawPixels menulis blok piksel ke framebuffer.

Sintaks

void WINAPI glDrawPixels(
         GLsizei width,
         GLsizei height,
         GLenum  format,
         GLenum  type,
   const GLvoid  *pixels
);

Parameter

width

Dimensi lebar persegi panjang piksel yang akan ditulis ke dalam framebuffer.

height

Dimensi tinggi persegi panjang piksel yang akan ditulis ke dalam framebuffer.

format

Format data piksel. Konstanta simbolis yang dapat diterima adalah sebagai berikut.

Nilai Makna
GL_COLOR_INDEX
Setiap piksel adalah nilai tunggal, indeks warna.
  1. Fungsi glDrawPixels mengonversi setiap piksel ke format titik tetap, dengan jumlah bit yang tidak ditentukan di sebelah kanan titik biner, terlepas dari jenis data memori. Nilai floating-point dikonversi ke nilai titik tetap yang benar. Fungsi glDrawPixels mengonversi data bilangan bulat yang ditandatangani dan tidak ditandatangani dengan semua bit pecahan diatur ke nol. Fungsi mengonversi data bitmap menjadi 0.0 atau 1.0.
  2. Fungsi glDrawPixels menggeser setiap indeks titik tetap yang ditinggalkan oleh bit GL_INDEX_SHIFT dan menambahkannya ke GL_INDEX_OFFSET. Jika GL_INDEX_SHIFT negatif, pergeseran ke kanan. Dalam kedua kasus, bit nol mengisi lokasi bit yang tidak ditentukan dalam hasil.
  3. Saat dalam mode RGBA, glDrawPixels mengonversi indeks yang dihasilkan menjadi piksel RGBA menggunakan tabel GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B, dan GL_PIXEL_MAP_I_TO_A. Saat dalam mode indeks warna dan GL_MAP_COLOR benar, indeks diganti dengan nilai yang direferensikan glDrawPixels dalam tabel pencarian GL_PIXEL_MAP_I_TO_I.
  4. Apakah penggantian pencarian indeks dilakukan atau tidak, bagian bilangan bulat indeks ANDed dengan 2b - 1, di mana b adalah jumlah bit dalam buffer indeks warna.
  5. Indeks yang dihasilkan atau warna RGBA kemudian dikonversi menjadi fragmen dengan melampirkan koordinat z-coordinate posisi raster dan tekstur saat ini ke setiap piksel, lalu menetapkan koordinat jendela x dan y ke fragmen ke-n seperti x? = lebar mod xrn +
    y? = yrn + /lebar
    di mana (xr , yr ) adalah posisi raster saat ini.
  6. Fungsi glDrawPixels memperlakukan fragmen piksel ini seperti fragmen yang dihasilkan oleh titik rasterisasi, garis, atau poligon. Ini menerapkan pemetaan tekstur, kabut, dan semua operasi fragmen sebelum menulis fragmen ke framebuffer.
GL_STENCIL_INDEX
Setiap piksel adalah nilai tunggal, indeks stensil.
  1. Fungsi glDrawPixels mengonversinya ke format titik tetap, dengan jumlah bit yang tidak ditentukan di sebelah kanan titik biner, terlepas dari jenis data memori. Nilai floating-point dikonversi ke nilai titik tetap yang benar. Fungsi glDrawPixels mengonversi data bilangan bulat yang ditandatangani dan tidak ditandatangani dengan semua bit pecahan diatur ke nol. Data bitmap dikonversi ke 0.0 atau 1.0.
  2. Fungsi glDrawPixels menggeser setiap indeks titik tetap yang ditinggalkan oleh bit GL_INDEX_SHIFT, dan menambahkannya ke GL_INDEX_OFFSET. Jika GL_INDEX_SHIFT negatif, pergeseran ke kanan. Dalam kedua kasus, bit nol mengisi lokasi bit yang tidak ditentukan dalam hasil.
  3. Jika GL_MAP_STENCIL benar, indeks diganti dengan nilai yang direferensikan glDrawPixels dalam tabel pencarian GL_PIXEL_MAP_S_TO_S.
  4. Apakah penggantian pencarian indeks dilakukan atau tidak, bagian bilangan bulat indeks kemudian ANDed dengan 2b - 1, di mana b adalah jumlah bit dalam buffer stensil. Indeks stensil yang dihasilkan kemudian ditulis ke buffer stensil stensil sehingga indeks ke-n ditulis ke lokasi x? = lebar mod xrn +
    y? = yrn + /lebar
    di mana (xr ,yr ) adalah posisi raster saat ini. Hanya uji kepemilikan piksel, uji gunting, dan writemask stensil yang memengaruhi penulisan ini.
GL_DEPTH_COMPONENT
Setiap piksel adalah komponen kedalaman tunggal.
  1. Fungsi glDrawPixels mengonversi data floating-point langsung ke format floating-point internal dengan presisi yang tidak ditentukan. Data bilangan bulat yang ditandatangani dipetakan secara linear ke format floating-point internal sehingga nilai bilangan bulat yang paling positif dapat direpresentasikan memetakan ke 1,0, dan peta nilai yang paling negatif yang dapat direpresentasikan ke -1,0. Data bilangan bulat yang tidak ditandatangani dipetakan juga: peta nilai bilangan bulat terbesar ke 1,0, dan peta nol ke 0,0.
  2. Fungsi glDrawPixels mengalikan nilai kedalaman floating-point yang dihasilkan dengan GL_DEPTH_SCALE dan menambahkannya ke GL_DEPTH_BIAS. Hasilnya dijepit ke rentang [0,1].
  3. Fungsi glDrawPixels mengonversi komponen kedalaman yang dihasilkan menjadi fragmen dengan melampirkan indeks warna atau indeks warna posisi raster saat ini dan koordinat tekstur ke setiap piksel, lalu menetapkan koordinat jendela x dan y ke fragmen ke-n seperti x? = lebar mod xrn +
    y? = yrn + /lebar
    di mana (xr ,yr ) adalah posisi raster saat ini.
  4. Fragmen piksel ini kemudian diperlakukan seperti fragmen yang dihasilkan oleh titik rasterisasi, garis, atau poligon. Fungsi glDrawPixels menerapkan pemetaan tekstur, kabut, dan semua operasi fragmen sebelum menulis fragmen ke framebuffer.
GL_RGBA
Setiap piksel adalah grup empat komponen dalam urutan ini: merah, hijau, biru, alfa.
  1. Fungsi glDrawPixels mengonversi nilai floating-point langsung ke format floating-point internal dengan presisi yang tidak ditentukan. Nilai bilangan bulat yang ditandatangani dipetakan secara linear ke format floating-point internal sehingga nilai bilangan bulat yang paling positif dapat direpresentasikan memetakan ke 1,0, dan peta nilai yang paling negatif yang dapat diwakili ke -1,0. Data bilangan bulat yang tidak ditandatangani dipetakan juga: peta nilai bilangan bulat terbesar ke 1,0, dan peta nol ke 0,0.
  2. Fungsi glDrawPixels mengalikan nilai warna floating-point yang dihasilkan dengan GL_c_SCALE dan menambahkannya ke GL_c_BIAS, di mana c adalah RED, GREEN, BLUE, dan ALPHA untuk komponen warna masing-masing. Hasilnya dijepit ke rentang [0,1].
  3. Jika GL_MAP_COLOR benar, glDrawPixels menskalakan setiap komponen warna dengan ukuran tabel pencarian GL_PIXEL_MAP_c_TO_c, lalu mengganti komponen dengan nilai yang direferensikannya dalam tabel tersebut; c adalah R, G, B, atau A, masing-masing.
  4. Fungsi glDrawPixels mengonversi warna RGBA yang dihasilkan menjadi fragmen dengan melampirkan koordinat z-coordinate dan tekstur posisi raster saat ini ke setiap piksel, lalu menetapkan koordinat jendela x dan y ke fragmen ke-n seperti x? = lebar mod xrn +
    y? = yrn + /width
    di mana (xr ,yr ) adalah posisi raster saat ini.
  5. Fragmen piksel ini kemudian diperlakukan seperti fragmen yang dihasilkan oleh titik rasterisasi, garis, atau poligon. Fungsi glDrawPixels menerapkan pemetaan tekstur, kabut, dan semua operasi fragmen sebelum menulis fragmen ke framebuffer.
GL_RED
Setiap piksel adalah komponen merah tunggal.
Fungsi glDrawPixels mengonversi komponen ini ke format floating-point internal dengan cara yang sama seperti komponen merah piksel RGBA, lalu mengonversinya menjadi piksel RGBA dengan hijau dan biru diatur ke 0,0, dan alfa diatur ke 1,0. Setelah konversi ini, piksel diperlakukan seolah-olah telah dibaca sebagai piksel RGBA.
GL_GREEN
Setiap piksel adalah komponen hijau tunggal.
Fungsi glDrawPixels mengonversi komponen ini ke format floating-point internal dengan cara yang sama seperti komponen hijau piksel RGBA, lalu mengonversinya menjadi piksel RGBA dengan merah dan biru diatur ke 0,0, dan alfa diatur ke 1,0. Setelah konversi ini, piksel diperlakukan seolah-olah telah dibaca sebagai piksel RGBA.
GL_BLUE
Setiap piksel adalah komponen biru tunggal.
Fungsi glDrawPixels mengonversi komponen ini ke format floating-point internal dengan cara yang sama seperti komponen biru piksel RGBA, lalu mengonversinya menjadi piksel RGBA dengan merah dan hijau diatur ke 0,0, dan alfa diatur ke 1,0. Setelah konversi ini, piksel diperlakukan seolah-olah telah dibaca sebagai piksel RGBA.
GL_ALPHA
Setiap piksel adalah komponen alfa tunggal.
Fungsi glDrawPixels mengonversi komponen ini ke format floating-point internal dengan cara yang sama seperti komponen alfa piksel RGBA, lalu mengonversinya menjadi piksel RGBA dengan merah, hijau, dan biru diatur ke 0,0. Setelah konversi ini, piksel diperlakukan seolah-olah telah dibaca sebagai piksel RGBA.
GL_RGB
Setiap piksel adalah sekelompok tiga komponen dalam urutan ini: merah, hijau, biru. Fungsi glDrawPixels mengonversi setiap komponen ke format floating-point internal dengan cara yang sama seperti komponen merah, hijau, dan biru dari piksel RGBA. Tiga warna dikonversi menjadi piksel RGBA dengan alfa diatur ke 1.0. Setelah konversi ini, piksel diperlakukan seolah-olah telah dibaca sebagai piksel RGBA.
GL_LUMINANCE
Setiap piksel adalah komponen luminance tunggal.
Fungsi glDrawPixels mengonversi komponen ini ke format floating-point internal dengan cara yang sama seperti komponen merah piksel RGBA, dan kemudian mengonversinya menjadi piksel RGBA dengan set merah, hijau, dan biru ke nilai luminans yang dikonversi, dan alfa diatur ke 1,0. Setelah konversi ini, piksel diperlakukan seolah-olah telah dibaca sebagai piksel RGBA.
GL_LUMINANCE_ALPHA
Setiap piksel adalah sekelompok dua komponen dalam urutan ini: luminance, alpha.
Fungsi glDrawPixels mengonversi dua komponen ke format floating-point internal dengan cara yang sama seperti komponen merah piksel RGBA, dan kemudian mengonversinya menjadi piksel RGBA dengan set merah, hijau, dan biru ke nilai luminans yang dikonversi, dan alfa diatur ke nilai alfa yang dikonversi. Setelah konversi ini, piksel diperlakukan seolah-olah telah dibaca sebagai piksel RGBA.
GL_BGR_EXT
Setiap piksel adalah sekelompok tiga komponen dalam urutan ini: biru, hijau, merah.
GL_BGR_EXT menyediakan format yang cocok dengan tata letak memori Windows bitmap independen perangkat (DIB). Dengan demikian, aplikasi Anda dapat menggunakan data yang sama dengan panggilan fungsi Windows dan panggilan fungsi piksel OpenGL.
GL_BGRA_EXT
Setiap piksel adalah sekelompok empat komponen dalam urutan ini: biru, hijau, merah, alfa.
GL_BGRA_EXT menyediakan format yang cocok dengan tata letak memori Windows bitmap independen perangkat (DIB). Dengan demikian, aplikasi Anda dapat menggunakan data yang sama dengan panggilan fungsi Windows dan panggilan fungsi piksel OpenGL.

jenis

Jenis data untuk piksel. Berikut ini adalah konstanta simbolis yang diterima dan maknanya.

Nilai Makna
GL_UNSIGNED_BYTE
Bilangan bulat 8-bit yang tidak ditandatangani
GL_BYTE
Bilangan bulat 8-bit yang ditandatangani
GL_BITMAP
Bit tunggal dalam bilangan bulat 8-bit yang tidak ditandatangani
GL_UNSIGNED_SHORT
Bilangan bulat 16-bit tidak ditandatangani
GL_SHORT
Bilangan bulat 16-bit yang ditandatangani
GL_UNSIGNED_INT
Bilangan bulat 32-bit yang tidak ditandatangani
GL_INT
bilangan bulat 32-bit
GL_FLOAT
Titik mengambang presisi tunggal

Piksel

Penunjuk ke data piksel.

Mengembalikan nilai

Fungsi ini tidak mengembalikan nilai.

Kode kesalahan

Kode kesalahan berikut dapat diambil oleh fungsi glGetError .

Nama Makna
GL_INVALID_VALUE
Lebar atautinggi negatif.
GL_INVALID_ENUM
Format ataujenis bukan nilai yang diterima.
GL_INVALID_OPERATION
formatnya adalah GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE, atau GL_LUMINANCE_ALPHA, dan OpenGL berada dalam mode indeks warna.
GL_INVALID_ENUM
jenis GL_BITMAP dan format tidak GL_COLOR_INDEX atau GL_STENCIL_INDEX.
GL_INVALID_OPERATION
format GL_STENCIL_INDEX dan tidak ada buffer stensil.
GL_INVALID_OPERATION
Fungsi ini dipanggil antara panggilan ke glBegin dan panggilan yang sesuai ke glEnd.

Keterangan

Fungsi glDrawPixels membaca data piksel dari memori dan menulisnya ke dalam framebuffer relatif terhadap posisi raster saat ini. Gunakan glRasterPos untuk mengatur posisi raster saat ini, dan gunakan glGet dengan argumen GL_CURRENT_RASTER_POSITION untuk mengkueri posisi raster.

Beberapa parameter menentukan pengodean data piksel dalam memori dan mengontrol pemrosesan data piksel sebelum ditempatkan di framebuffer. Parameter ini diatur dengan empat fungsi: glPixelStore, glPixelTransfer, glPixelMap, dan glPixelZoom. Topik ini menjelaskan efek pada glDrawPixels dari banyak, tetapi tidak semua, dari parameter yang ditentukan oleh keempat fungsi ini.

Data dibaca dari piksel sebagai urutan byte yang ditandatangani atau tidak ditandatangani, celana pendek yang ditandatangani atau tidak ditandatangani, bilangan bulat yang ditandatangani atau tidak ditandatangani, tergantung pada jenis. Masing-masing byte, celana pendek, bilangan bulat, atau nilai floating-point ini ditafsirkan sebagai satu komponen warna atau kedalaman, atau satu indeks, tergantung pada format. Indeks selalu diperlakukan secara individual. Komponen warna diperlakukan sebagai grup dari satu, dua, tiga, atau empat nilai, sekali lagi berdasarkan format. Indeks individu dan grup komponen disebut sebagai piksel. Jika jenis GL_BITMAP, data harus tidak ditandatangani byte, dan format harus GL_COLOR_INDEX atau GL_STENCIL_INDEX. Setiap byte yang tidak ditandatangani diperlakukan sebagai delapan piksel 1-bit, dengan urutan bit ditentukan oleh GL_UNPACK_LSB_FIRST (lihat glPixelStore).

Lebar menurut piksel tinggi dibaca dari memori, dimulai dari piksel lokasi. Secara default, piksel ini diambil dari lokasi memori yang berdekatan, kecuali setelah semua piksel lebar dibaca, penunjuk baca dimajukan ke batas 4 byte berikutnya. Fungsi glPixelStore menentukan perataan baris 4-byte dengan argumen GL_UNPACK_ALIGNMENT, dan Anda dapat mengaturnya ke 1, 2, 4, atau 8 byte. Parameter penyimpanan piksel lainnya menentukan kemajuan penunjuk baca yang berbeda, baik sebelum piksel pertama dibaca, dan setelah semua piksel lebar dibaca. Fungsi glPixelStore beroperasi pada setiap piksel lebar demi tinggi yang dibacanya dari memori dengan cara yang sama, berdasarkan nilai beberapa parameter yang ditentukan oleh glPixelTransfer dan glPixelMap. Detail operasi ini, serta buffer target tempat piksel digambar, khusus untuk format piksel, seperti yang ditentukan oleh format.

Rasterisasi yang dijelaskan sejauh ini mengasumsikan faktor zoom piksel 1.0. Jika Anda menggunakan glPixelZoom untuk mengubah faktor zoom piksel x dan y , piksel dikonversi menjadi fragmen sebagai berikut. Jika (xr,yr) adalah posisi raster saat ini, dan piksel tertentu berada di kolom ke-n dan baris mth persegi panjang piksel, maka fragmen dihasilkan untuk piksel yang pusatnya berada di persegi panjang dengan sudut di

(xr + zoom? n, yrzoomym + )

(xr + zoom? (n + 1), yrzoomy + (m + 1))

di mana zoom? adalah nilai GL_ZOOM_X dan zoomy adalah nilai GL_ZOOM_Y.

Fungsi berikut mengambil informasi yang terkait dengan glDrawPixels:

glGet dengan argumen GL_CURRENT_RASTER_POSITION

glGet dengan GL_CURRENT_RASTER_POSITION_VALID argumen

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung
Windows 2000 Server [hanya aplikasi desktop]
Header
Gl.h
Pustaka
Opengl32.lib
DLL
Opengl32.dll

Lihat juga

glAlphaFunc

glBegin

glBlendFunc

glCopyPixels

glDepthFunc

glEnd

glGet

glLogicOp

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadPixels

glScissor

glStencilFunc