• Tidak ada hasil yang ditemukan

3.2. Algoritma Manajemen Scene

3.5.19. Flowchart Operasi Render()

Operasi ini merupakan operasi yang panjang dan rumit yang bertugas untuk merender buffer statis (verteks dan indeks) yang telah dibuat sebelumnya berserta skin yang berhubungan dengan buffer tersebut. Operasi Render() adalah operasi dari kelas TumozD3DVCManager yang juga merupakan operasi turunan dari interface TumozVertexCacheManager.

Pertama-tama operasi ini dimulai dengan memanggil fungsi

GetShadeMode() dari obyek TumozD3D untuk memeriksa jenis render state yang akan digunakan dalam merender buffer statis apakah dalam bentuk solid, berjaring (wired), garis, titik, dan sebagainya. Setelah itu mengaktifkan buffer indeks dengan menggunakan fungsi SetIndices() dari obyek device.

Proses selanjutnya dari operasi ini adalah pengaturan skin yang akan digunakan baik dengan atau tanpa shader. Proses tersebut terdiri dari proses mengatur material dengan memanggil fungsi SetMaterial(), mengatur tekstur

menggunakan fungsi SetTexture(), dan mengatur kondisi alpha untuk efek

transparansi menggunakan fungsi SetRenderState()dari obyek device.

Tahapan berikutnya dilanjutkan dengan mengatur FVF menggunakan fungsi SetFVF() dari obyek device apabila shader tidak digunakan. Setelah itu melakukan pengaturan additive blending dan buffer warna (color buffer) untuk rendering dengan memanggil fungsi SetRenderState() dari obyek device.

Dan terakhir adalah menggambar (render) buffer statis baik yang menggunakan buffer indeks maupun tidak dengan menggunakan fungsi

DrawIndexedPrimitive() dan DrawPrimitive() dari obyek device berdasarkan jenis

STIKOM

99

masing-masing render statenya. Detil dari proses flowchart operasi ini digambarkan pada gambar 3.48., 3.49. dan 3.50.

Mulai

Buat variabel sementara seperti Hresult hr & int iT

Panggil GetShadeMode() dari pointer global TumozD3D dan simpan

dalam TUMOZRENDERSTATE sm Cek ID dari param >= jumlah Static buffer yang ada? error: ID Buffer Statis Tidak Valid Ya Return TUMOZ_INVALID PARAM Set variabel ActiveCache global ke MAX_ID Cek variabel global ActiveSB != ID dari param? Tidak Cek pointer Static Buffer pada indeks

ID dari param menggunakan Index

buffer? Ya

Panggil SetIndices() dari pointer D3D Device dengan

data IB sbg parameter dari pointer Static Buffer global berdasarkan ID param

Ya

Panggil SetStreamSource() dari pointer D3D Device dengan data Vertex Buffer sbg parameter dari pointer Static Buffer berdasarkan

ID param

Set variabel ActiveSB global mengarah pada

ID dari parameter Tidak Cek variabel global ActiveIB != MAX_ID? Tidak Cek pointer Static Buffer pada indeks

ID dari param menggunakan Index buffer?

Panggil SetIndices() dari pointer D3D Device dengan data IB

sbg parameter dari pointer Static Buffer global berdasarkan ID param Ya Ya Set variabel global ActiveIB = MAX_ID Tidak Cek pemanggilan GetActiveSkinID() dari pointer TumozD3D != atribut SkinID dari

pointer Static Buffer bdsrkan

ID param? Tidak

Buat pointer lokal TUMOZSKIN pSkin berisi data Skin dari Skin Manager dengan

indeks dari ID Skin Static Buffer

Ya

sm == RS_SHADE_

SOLID

Buat pointer lokal TUMOZMATERIAL pMat berisi data Material dari Skin Manager dengan indeks dari

pSkin->nMaterial Ya Cek TumozD3D tidak menggunakan Shader?

Buat D3DMATERIAL9 mat yang berisi warna RGBA masing-masing

material Diffuse, Ambient, Specular, Emissive dan Specular

Power dari pMat Ya

Panggil SetMaterial() dari pointer D3D Device

dengan mat sbg parameter

Panggil SetShaderConstant() dari TumozD3D untuk warna material Ambient,

Diffuse, Specular dan Emissive berasal dari pMat Tidak Cek TumozD3D menggunakan Texture? Panggil SetTexture() dari D3D Device dengan indeks 0 dan NULL sbg parameter Tidak

Panggil GetWireColor() dari pointer TumozD3D dan simpan

hasillnya ke TUMOZCOLOR clrWire sbg warna Wireframe Tidak

Buat D3DMATERIAL9 matW yang berisi warna RGBA masing-masing material Diffuse, dan Ambient

dari clrWire

Panggil SetMaterial() dari pointer D3D Device

dengan matW sbg parameter A Tidak B Ya C Selesai

Gambar 3.48. Flowchart Operasi Render()

STIKOM

iT = 0 Ya iT < 8 pSkin-> nTexture[iT] != MAX_ID Ya

Panggil SetTexture() dari D3D Device dgn indeks iT dan data texture dari Skin Manager sbg

parameter Ya

Panggil SetTextureStageState() dari D3D Device dgn indeks iT dan Beberapa Perintah Operasi

Texture sbg parameter break Tidak iT++ Panggil SetTextureStageState() dari D3D Device dgn indeks iT dan

Perintah Disable Operasi Texture sbg parameter Tidak

Panggil SetTextureStageState() dari D3D Device dgn indeks 1 dan Perintah Disable Operasi

Texture sbg parameter

pSkin- >bAlpha

Panggil SetRenderState() dari D3D Device dan beberapa perintah untuk mengaktifkan

Alpha Blending Ya

Panggil SetRenderState() dari D3D Device dan beberapa perintah untuk

menonaktifkan Alpha Blending Tidak

Panggil SetActiveSkinID() dari TumozD3D dengan attribut SkinID dari pointer Static Buffer

indeks ID dari parameter

Cek pemanggilan UsesShaders() dari pointer TumozD3D apakah tidak menggunakan Shader?

Panggil SetFVF() dari D3D Device dengan data FVF dari

Static Buffer indeks ID sbg parameter Ya Tidak Cek attribut bIndis dari pointer Static Buffer true? Tidak sm == RS_SHADE_ POINTS Ya Panggil DrawPrimitive() dari D3D Device dgn D3DPT_POINTLIST dan

Jumlah Verts dari pointer Static buffer sbg

param dan simpan hasilnya ke hr Ya sm == RS_SHADE_ LINES Tidak Panggil DrawIndexedPrimitive() dari D3D Device dgn D3DPT_LINELIST, Jml Verts dan Jml Indis/2 dari pointer Static buffer sbg param dan

simpan hasilnya ke hr Ya sm == RS_SHADE_ HULLWIRE Tidak Panggil DrawIndexedPrimitive() dari D3D Device dgn D3DPT_LINESTRIP dan Jml

Verts dari pointer Static buffer sbg param dan simpan hasilnya ke hr Ya Panggil DrawIndexedPrimitive() dari D3D Device dgn D3DPT_TRIANGLELIST, Jml Verts dan Jml Tris dari

pointer Static buffer sbg param dan simpan

hasilnya ke hr Tidak Tidak A B C Return hr Selesai D

Gambar 3.49. Lanjutan Flowchart Operasi Render()

STIKOM

101 Return hr Selesai sm == RS_SHADE_ POINTS Panggil DrawPrimitive() dari D3D Device dgn D3DPT_POINTLIST dan

Jumlah Verts dari pointer Static buffer sbg

param dan simpan hasilnya ke hr Ya sm == RS_SHADE_ LINES sm == RS_SHADE_ HULLWIRE Tidak Tidak Panggil DrawPrimitive() dari D3D Device dgn D3DPT_LINELIST dan Jumlah Verts/2 dari pointer Static buffer sbg

param dan simpan hasilnya ke hr

Ya

Panggil DrawPrimitive() dari D3D Device dgn D3DPT_LINESTRIP dan

Jumlah Verts dari pointer Static buffer sbg

param dan simpan hasilnya ke hr

Ya

Panggil DrawPrimitive() dari D3D Device dgn D3DPT_TRIANGLELIST dan

Jumlah Tris dari pointer Static buffer sbg param dan

simpan hasilnya ke hr Tidak

Tidak D

Gambar 3.50. Lanjutan Flowchart Operasi Render()

Dokumen terkait