Flowchart Operasi Render Flowchart Diagram

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