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 SURABAYA
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 SURABAYA
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 Indis2 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 SURABAYA
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 Verts2 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
3.6. Component Diagram