fungsi glCopyPixels

Fungsi glCopyPixels menyalin piksel di framebuffer.

Sintaks

void WINAPI glCopyPixels(
   GLint   x,
   GLint   y,
   GLsizei width,
   GLsizei height,
   GLenum  type
);

Parameter

x

Koordinat x-plane jendela sudut kiri bawah wilayah persegi panjang piksel yang akan disalin.

y

Koordinat bidang y jendela sudut kiri bawah wilayah persegi panjang piksel yang akan disalin.

width

Dimensi lebar wilayah persegi panjang piksel yang akan disalin. Harus nonnegatif.

height

Dimensi tinggi wilayah persegi panjang piksel yang akan disalin. Harus nonnegatif.

jenis

Menentukan apakah glCopyPixels adalah menyalin nilai warna, nilai kedalaman, atau nilai stensil. Konstanta simbolis yang dapat diterima adalah.

Nilai Makna
GL_COLOR
Fungsi glCopyPixels membaca indeks atau warna RGBA dari buffer yang saat ini ditentukan sebagai buffer sumber baca (lihat glReadBuffer).
Jika OpenGL dalam mode indeks warna:
  1. Setiap indeks yang dibaca dari buffer ini dikonversi ke format titik tetap dengan jumlah bit yang tidak ditentukan di sebelah kanan titik biner.
  2. Setiap indeks digeser ke kiri oleh bit GL_INDEX_SHIFT, dan ditambahkan 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_COLOR benar, indeks diganti dengan nilai yang dirujuknya dalam tabel pencarian GL_PIXEL_MAP_I_TO_I.
  4. Apakah penggantian pencarian indeks dilakukan atau tidak, bagian bilangan bulat indeks kemudian dandiedit dengan 2b 1, di mana b adalah jumlah bit dalam buffer indeks warna.
Jika OpenGL berada dalam mode RGBA:
  1. Komponen merah, hijau, biru, dan alfa dari setiap piksel yang dibaca dikonversi ke format floating-point internal dengan presisi yang tidak ditentukan.
  2. Konversi memetakan nilai komponen terbesar yang dapat diwakili ke 1,0, dan nilai komponen nol ke 0,0.
  3. Nilai warna floating-point yang dihasilkan kemudian dikalikan dengan GL_c_SCALE dan ditambahkan ke GL_c_BIAS, di mana c adalah RED, GREEN, BLUE, dan ALPHA untuk komponen warna masing-masing.
  4. Hasilnya dijepit ke rentang [0,1].
  5. Jika GL_MAP_COLOR benar, setiap komponen warna diskalakan oleh ukuran tabel pencarian GL_PIXEL_MAP_c_TO_c, lalu digantikan oleh nilai yang dirujuknya dalam tabel tersebut; c adalah R, G, B, atau A, masing-masing. Indeks yang dihasilkan atau warna RGBA kemudian dikonversi menjadi fragmen dengan melampirkan koordinat z-koordinat dan tekstur posisi raster saat ini ke setiap piksel, lalu menetapkan koordinat jendela (xr + i, yr + j), di mana (xr , yr ) adalah posisi raster saat ini, dan piksel adalah piksel di posisi i di baris j. Fragmen piksel ini kemudian diperlakukan seperti fragmen yang dihasilkan oleh titik rasterisasi, garis, atau poligon. Pemetaan tekstur, kabut, dan semua operasi fragmen diterapkan sebelum fragmen ditulis ke framebuffer.
GL_DEPTH
Nilai kedalaman dibaca dari buffer kedalaman dan dikonversi langsung ke format floating-point internal dengan presisi yang tidak ditentukan. Nilai kedalaman floating-point yang dihasilkan kemudian dikalikan dengan GL_DEPTH_SCALE dan ditambahkan ke GL_DEPTH_BIAS. Hasilnya dijepit ke rentang [0,1].
Komponen kedalaman yang dihasilkan kemudian dikonversi ke fragmen dengan melampirkan warna posisi raster saat ini atau indeks warna dan koordinat tekstur ke setiap piksel, lalu menetapkan koordinat jendela (xr + i, yr + j), di mana (xr , yr ) adalah posisi raster saat ini, dan piksel adalah piksel di posisi i di baris j . Fragmen piksel ini kemudian diperlakukan seperti fragmen yang dihasilkan oleh titik rasterisasi, garis, atau poligon. Pemetaan tekstur, kabut, dan semua operasi fragmen diterapkan sebelum fragmen ditulis ke framebuffer.
GL_STENCIL
Indeks stensil dibaca dari buffer stensil dan dikonversi ke format titik tetap internal dengan jumlah bit yang tidak ditentukan di sebelah kanan titik biner. Setiap indeks titik tetap kemudian digeser ke kiri oleh bit GL_INDEX_SHIFT, dan ditambahkan 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. Jika GL_MAP_STENCIL benar, indeks diganti dengan nilai yang dirujuknya dalam tabel pencarian GL_PIXEL_MAP_S_TO_S. Apakah penggantian pencarian indeks dilakukan atau tidak, bagian bilangan bulat dari indeks kemudian DANdiedit dengan 2b - 1, di mana b adalah jumlah bit dalam buffer stensil. Indeks stensil yang dihasilkan kemudian ditulis ke buffer stensil stensil sehingga indeks yang dibaca dari lokasi i baris j ditulis ke lokasi (xr + i, yr + j), di mana (x r , yr ) adalah posisi raster saat ini. Hanya uji kepemilikan piksel, uji gunting, dan writemask stensil yang memengaruhi penulisan ini.

Nilai kembali

Fungsi ini tidak mengembalikan nilai.

Kode kesalahan

Kode kesalahan berikut dapat diambil oleh fungsi glGetError .

Nama Makna
GL_INVALID_ENUM
tipe bukan nilai yang diterima.
GL_INVALID_VALUE
Lebar atau tinggi negatif.
GL_INVALID_OPERATION
jenis GL_DEPTH dan tidak ada buffer kedalaman.
GL_INVALID_OPERATION
jenis GL_STENCIL dan tidak ada buffer stensil.
GL_INVALID_OPERATION
Fungsi ini dipanggil antara panggilan ke glBegin dan panggilan yang sesuai ke glEnd.

Keterangan

Fungsi glCopyPixels menyalin persegi panjang piksel yang selaras dengan layar dari lokasi framebuffer yang ditentukan ke wilayah yang relatif terhadap posisi raster saat ini. Operasinya didefinisikan dengan baik hanya jika seluruh wilayah sumber piksel berada dalam bagian jendela yang terbuka. Hasil salinan dari luar jendela, atau dari wilayah jendela yang tidak terekspos, bergantung pada perangkat keras dan tidak terdefinisi.

Parameter x dan y menentukan koordinat jendela sudut kiri bawah wilayah persegi panjang yang akan disalin. Parameter lebar dan tinggi menentukan dimensi wilayah persegi panjang yang akan disalin. Lebar dan tinggi harus nonnegatif.

Beberapa parameter mengontrol pemrosesan data piksel saat sedang disalin. Parameter ini diatur dengan tiga fungsi: glPixelTransfer, glPixelMap, dan glPixelZoom. Topik ini menjelaskan efek pada glCopyPixels sebagian besar, tetapi tidak semua, dari parameter yang ditentukan oleh ketiga fungsi ini.

Fungsi glCopyPixels menyalin nilai dari setiap piksel dengan sudut kiri bawah di (x + i, y + j) untuklebar 0 = i< dantinggi 0 = j<. Piksel ini dikatakan sebagai piksel i di baris j . Piksel disalin dalam urutan baris dari baris terendah ke tertinggi, kiri ke kanan di setiap baris.

Parameter jenis menentukan apakah data warna, kedalaman, atau stensil akan disalin.

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 lokasi i di baris j persegi panjang piksel sumber, maka fragmen dihasilkan untuk piksel yang tengahnya berada di persegi panjang dengan sudut di

(xr + memperbesar? i, yr + zoomyj)

dan

(xr + memperbesar? (i + 1), yr + zoomy (j + 1))

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

Mode yang ditentukan oleh glPixelStore tidak berpengaruh pada pengoperasian glCopyPixels.

Fungsi berikut mengambil informasi yang terkait dengan glCopyPixels:

glGet dengan argumen GL_CURRENT_RASTER_POSITION

glGet dengan argumen GL_CURRENT_RASTER_POSITION_VALID

Untuk menyalin piksel warna di sudut kiri bawah jendela ke posisi raster saat ini, gunakan

glCopyPixels( 0, 0, 1, 1, GL_COLOR );

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

glBegin

glDepthFunc

glDrawBuffer

glDrawPixels

glEnd

glGet

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadBuffer

glReadPixels

glStencilFunc