- Mesaj
- 4.413
- Çözümler
- 442
- Beğeni
- 5.028
- Puan
- 2.849
- Ticaret Puanı
- 0
Merhabalar, bu konuda sadece grafik alanında yaptığım düzenlemeleri paylaşacağım. Bugüne kadar yaptıklarımı önceki konularımdan az çok biliyorsunuz.
Bu konuda ise detaylı bir değişiklik günlüğü paylaşacağım. Ek olarak konu içerisinde farklı fikirler veya istekler gelmesi doğrultusunda bunları da uygulamayı deneyebilirim. Ancak şu an başlangıç olarak özelleştirme değil, tam stabilizasyon ve temizlik aşamasındayım.
Client dosyaları bütünüyle shader yapısına taşıdıktan sonra yaptığım tüm düzenlemeleri kendi filesıma aktardım. Kendi filesım normalde zenaris grafiklerini referans alıyordu ve mümkün olduğunca iyileştirilmiş haliydi. Şimdi ise zenarise ait tüm kodlar ve beraberinde metin2'nin kullandığı fixed pipeline kodların tamamı kaldırıldı.
Bu aktarma sürecinde aralarda kaynayan ufak tefek yerleri de crash yaşayarak tespit ettim ve onları da shadera taşıdım. Şu an itibariyle tam anlamıyla login ekranından oyun içindeki lonca simgesine kadar her şey shaderlar tarafından yönetiliyor.
Bunun getirisi olduğu kadar götürüsü de oluyor doğal olarak.
Örneğin; MOB_LAG_FIX, RENDER_TARGET vb. grafik bağlantılı sistemler artık doğrudan eklenip çalıştırılamaz, daha doğrusu derleme bile yapılamaz.
Shader yapısına entegre edilmesi zorunludur. Eğer mevcut shaderlarla uyumsuz-farklı bir sistem ise yeni shader yazılması ve bu shaderın sisteme tanıtılması gerekir.
Çünkü artık hem metin2'nin hem de bu gibi sistemlerin kullandığı STATEMANAGER.SetTransform, STATEMANAGER.SetTexture gibi çağrılar projede mevcut değil.
Aşağıda StateManager.cpp ve .h dosyalarından geriye kalanları görünce demek istediğimi anlayacaksınız;
Son açtığım konudan bu yana geçen sürede temizlik ve bazı uyarlamalar yaptım. Render target sistemi tamamen shadera uyarlandı ve offline shop'un bazı gerektirdiği fonksiyonları da beraberinde uyarlandı. Şu an için en can sıkıcı durum debug modda FPS 10 civarlarında oluyor
Ona da yapacak bir şey yok.
Bu projeyi sırf fantezi için geliştiriyorum, dolayısıyla oyun seçenekleri içerisindeki grafikle ilgili ayarlara çok derinlemesine değinmeyeceğim.
Bu alanda çok profesyonel olduğum söylenemez, bu yüzden biraz yavaş ilerleyen bir süreç olacak ama özelleştirmeler yaptıkça konu altından paylaşacağım. Genel olarak ana konu içeriği şimdilik bu kadar.
Son olarak;
Projeden tamamen kaldırıldı.
Bu konuda ise detaylı bir değişiklik günlüğü paylaşacağım. Ek olarak konu içerisinde farklı fikirler veya istekler gelmesi doğrultusunda bunları da uygulamayı deneyebilirim. Ancak şu an başlangıç olarak özelleştirme değil, tam stabilizasyon ve temizlik aşamasındayım.
Client dosyaları bütünüyle shader yapısına taşıdıktan sonra yaptığım tüm düzenlemeleri kendi filesıma aktardım. Kendi filesım normalde zenaris grafiklerini referans alıyordu ve mümkün olduğunca iyileştirilmiş haliydi. Şimdi ise zenarise ait tüm kodlar ve beraberinde metin2'nin kullandığı fixed pipeline kodların tamamı kaldırıldı.
Bu aktarma sürecinde aralarda kaynayan ufak tefek yerleri de crash yaşayarak tespit ettim ve onları da shadera taşıdım. Şu an itibariyle tam anlamıyla login ekranından oyun içindeki lonca simgesine kadar her şey shaderlar tarafından yönetiliyor.
Bunun getirisi olduğu kadar götürüsü de oluyor doğal olarak.
Örneğin; MOB_LAG_FIX, RENDER_TARGET vb. grafik bağlantılı sistemler artık doğrudan eklenip çalıştırılamaz, daha doğrusu derleme bile yapılamaz.
Shader yapısına entegre edilmesi zorunludur. Eğer mevcut shaderlarla uyumsuz-farklı bir sistem ise yeni shader yazılması ve bu shaderın sisteme tanıtılması gerekir.
Çünkü artık hem metin2'nin hem de bu gibi sistemlerin kullandığı STATEMANAGER.SetTransform, STATEMANAGER.SetTexture gibi çağrılar projede mevcut değil.
Aşağıda StateManager.cpp ve .h dosyalarından geriye kalanları görünce demek istediğimi anlayacaksınız;
StateManager.cpp
StateManager.h
C++:
#include "StdAfx.h"
#include "StateManager.h"
#define StateManager_Assert(a) assert(a)
struct SLightData
{
enum
{
LIGHT_NUM = 8,
};
D3DLIGHT9 m_akD3DLight[LIGHT_NUM];
} m_kLightData;
void CStateManager::SetLight(DWORD index, CONST D3DLIGHT9* pLight)
{
assert(index < SLightData::LIGHT_NUM);
m_kLightData.m_akD3DLight[index] = *pLight;
m_lpD3DDev->SetLight(index, pLight);
}
void CStateManager::GetLight(DWORD index, D3DLIGHT9* pLight)
{
assert(index < 8);
*pLight = m_kLightData.m_akD3DLight[index];
}
bool CStateManager::BeginScene()
{
if (FAILED(m_lpD3DDev->BeginScene()))
return false;
return true;
}
void CStateManager::EndScene()
{
m_lpD3DDev->EndScene();
}
CStateManager::CStateManager(LPDIRECT3DDEVICE9 lpDevice) : m_lpD3DDev(NULL)
{
SetDevice(lpDevice);
}
CStateManager::~CStateManager()
{
if (m_lpD3DDev)
{
m_lpD3DDev->Release();
m_lpD3DDev = NULL;
}
}
void CStateManager::SetDevice(LPDIRECT3DDEVICE9 lpDevice)
{
StateManager_Assert(lpDevice);
lpDevice->AddRef();
if (m_lpD3DDev)
{
m_lpD3DDev->Release();
m_lpD3DDev = NULL;
}
m_lpD3DDev = lpDevice;
}
StateManager.h
C++:
#ifndef __CSTATEMANAGER_H
#define __CSTATEMANAGER_H
#include <directx/d3d9.h>
#include <directx/d3dx9.h>
#include "../eterBase/Singleton.h"
class CStateManagerState
{
public:
CStateManagerState()
{
}
};
class CStateManager : public CSingleton<CStateManager>
{
public:
CStateManager(LPDIRECT3DDEVICE9 lpDevice);
virtual ~CStateManager();
bool BeginScene();
void EndScene();
void SetLight(DWORD index, CONST D3DLIGHT9* pLight);
void GetLight(DWORD index, D3DLIGHT9* pLight);
private:
void SetDevice(LPDIRECT3DDEVICE9 lpDevice);
public:
LPDIRECT3DDEVICE9 m_lpD3DDev;
};
#define STATEMANAGER (CStateManager::Instance())
#endif __CSTATEMANAGER_H
Son açtığım konudan bu yana geçen sürede temizlik ve bazı uyarlamalar yaptım. Render target sistemi tamamen shadera uyarlandı ve offline shop'un bazı gerektirdiği fonksiyonları da beraberinde uyarlandı. Şu an için en can sıkıcı durum debug modda FPS 10 civarlarında oluyor

Bu projeyi sırf fantezi için geliştiriyorum, dolayısıyla oyun seçenekleri içerisindeki grafikle ilgili ayarlara çok derinlemesine değinmeyeceğim.
Bu alanda çok profesyonel olduğum söylenemez, bu yüzden biraz yavaş ilerleyen bir süreç olacak ama özelleştirmeler yaptıkça konu altından paylaşacağım. Genel olarak ana konu içeriği şimdilik bu kadar.
Son olarak;
Kod:
EterLib/Decal.cpp ve .h
EterLib/GrpPixelShader.cpp ve .h
EterLib/GrpVertexShader.cpp ve .h
EterLib/ScreenFilter.cpp ve .h
EterLib/GrpShadowTexture.cpp ve .h
GameLib/TerrainDecal.cpp ve .h
GameLib/SnowParticle.cpp ve .h