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:- Setiap indeks yang dibaca dari buffer ini dikonversi ke format titik tetap dengan jumlah bit yang tidak ditentukan di sebelah kanan titik biner.
- 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.
- Jika GL_MAP_COLOR benar, indeks diganti dengan nilai yang dirujuknya dalam tabel pencarian GL_PIXEL_MAP_I_TO_I.
- 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.
- Komponen merah, hijau, biru, dan alfa dari setiap piksel yang dibaca dikonversi ke format floating-point internal dengan presisi yang tidak ditentukan.
- Konversi memetakan nilai komponen terbesar yang dapat diwakili ke 1,0, dan nilai komponen nol ke 0,0.
- 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.
- Hasilnya dijepit ke rentang [0,1].
- 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 |
---|---|
|
tipe bukan nilai yang diterima. |
|
Lebar atau tinggi negatif. |
|
jenis GL_DEPTH dan tidak ada buffer kedalaman. |
|
jenis GL_STENCIL dan tidak ada buffer stensil. |
|
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 |
|
Pustaka |
|
DLL |
|