diff --git a/Code/Dokumentation/Danbias Structure.uxf b/Code/Dokumentation/Danbias Structure.uxf index c24380c9..d52aa795 100644 --- a/Code/Dokumentation/Danbias Structure.uxf +++ b/Code/Dokumentation/Danbias Structure.uxf @@ -1,212 +1,197 @@ - 11 + 7 com.umlet.element.Class - 847 - 363 - 132 - 33 + 728 + 413 + 91 + 21 - Graphics + Graphics <<module>> +bg=orange com.umlet.element.Class - 561 - 363 - 132 - 33 + 546 + 413 + 84 + 21 - Sound + Sound<<?>> com.umlet.element.Class - 671 - 209 - 132 - 33 + 616 + 322 + 84 + 21 - Physics + Physics <<module>> +bg=orange com.umlet.element.Class - 858 - 132 - 121 - 33 + 735 + 238 + 77 + 21 - Game client + Game client <<dll>> +bg=red com.umlet.element.Class - 484 - 209 - 154 - 33 + 616 + 287 + 98 + 21 - Gamelogic + Gamelogic <<dll>> +bg=red com.umlet.element.Class - 506 - 132 - 121 - 33 + 504 + 238 + 84 + 21 - Game server + Game server <<dll>> +bg=red com.umlet.element.Class - 671 - 132 - 132 - 33 + 616 + 238 + 84 + 21 - Network + Network <<module>> +bg=orange com.umlet.element.Class - 704 - 363 - 132 - 33 + 637 + 413 + 84 + 21 - Input + Input<<lib>> +bg=blue com.umlet.element.Class - 495 - 55 - 176 - 44 + 714 + 182 + 98 + 28 - DanBiasClientLauncher + GameLauncher <<exe>> bg=green com.umlet.element.Relation - 880 - 132 - 54 - 252 + 749 + 238 + 34 + 188 lt=<- - 33;231;33;209;33;33 + 21;175;21;161;21;21 com.umlet.element.Relation - 583 - 132 - 351 - 252 + 560 + 238 + 223 + 188 lt=<- - 33;231;33;209;330;209;330;33 + 21;175;21;161;210;161;210;21 com.umlet.element.Relation - 528 - 132 - 54 - 98 + 525 + 238 + 146 + 62 lt=<- - 33;77;33;33 + 133;49;133;35;21;35;21;21 com.umlet.element.Relation - 594 - 110 - 98 - 54 + 567 + 224 + 62 + 34 lt=<- - 77;33;33;33 + 49;21;21;21 com.umlet.element.Relation - 605 - 187 - 87 - 54 + 637 + 287 + 34 + 48 lt=<- - 66;33;33;33 + 21;35;21;21 com.umlet.element.Relation - 737 - 132 - 197 - 252 + 658 + 238 + 125 + 188 lt=<- - 33;231;33;209;176;209;176;33 + 21;175;21;161;112;161;112;21 com.umlet.element.Relation - 770 - 110 - 109 - 54 + 679 + 224 + 69 + 34 lt=<- - 33;33;88;33 - - - com.umlet.element.Relation - - 880 - 66 - 54 - 87 - - lt=>- - 33;33;33;66 - - - com.umlet.element.Relation - - 528 - 66 - 54 - 87 - - lt=>- - 33;33;33;66 + 21;21;56;21 com.umlet.element.Package - 440 - 22 - 550 - 396 + 455 + 161 + 371 + 287 GameEngine @@ -214,21 +199,21 @@ bg=green com.umlet.element.Relation - 880 - 363 - 54 - 164 + 749 + 413 + 34 + 104 lt=<<. - 33;33;33;143 + 21;21;21;91 com.umlet.element.Package - 891 - 506 - 319 - 220 + 756 + 504 + 203 + 140 Graphics @@ -236,10 +221,10 @@ bg=green com.umlet.element.Class - 902 - 539 - 297 - 176 + 763 + 525 + 189 + 112 <<interface>> OysterGfx @@ -256,10 +241,10 @@ Release(resource :Model*) :void com.umlet.element.Package - 561 - 506 - 308 - 242 + 546 + 504 + 196 + 154 Input @@ -267,21 +252,21 @@ Release(resource :Model*) :void com.umlet.element.Relation - 649 - 363 - 142 - 175 + 602 + 413 + 90 + 111 lt=<<. - 121;33;121;154;33;154 + 77;21;77;98;21;98 com.umlet.element.Class - 572 - 539 - 286 - 198 + 553 + 525 + 182 + 126 <<interface>> RawInput @@ -299,32 +284,33 @@ Enable(Enable :bool) :void com.umlet.element.Class - 451 - 363 - 99 - 33 + 462 + 413 + 77 + 21 - Window API + Window API<<lib>> +bg=blue com.umlet.element.Relation - 462 - 132 - 472 - 252 + 483 + 238 + 300 + 188 lt=<- - 33;231;33;209;451;209;451;33 + 21;175;21;161;287;161;287;21 com.umlet.element.Package - 176 - 506 - 374 - 242 + 301 + 504 + 238 + 154 Sound @@ -332,10 +318,10 @@ Enable(Enable :bool) :void com.umlet.element.Class - 187 - 539 - 352 - 121 + 308 + 525 + 224 + 77 <<interface>> SoundWrapper @@ -349,10 +335,10 @@ Release(Resource :ResourceHandle*) :void com.umlet.element.Class - 187 - 693 - 352 - 44 + 308 + 623 + 224 + 28 <<API>> -- @@ -362,79 +348,152 @@ FMOD com.umlet.element.Relation - 330 - 627 - 54 - 87 + 399 + 581 + 34 + 55 lt=<<. - 33;66;33;33 + 21;42;21;21 com.umlet.element.Relation - 286 - 363 - 362 - 175 + 371 + 413 + 230 + 111 lt=<<. - 341;33;341;88;253;88;253;154;33;154 + 217;21;217;56;161;56;161;98;21;98 com.umlet.element.Class - 781 - 55 - 198 - 44 + 476 + 329 + 84 + 28 - DanBiasServerLauncher + Math <<lib>> +-- +/Is used globaly/ +bg=blue + + + + com.umlet.element.Relation + + 539 + 238 + 237 + 125 + + lt=<- + 21;112;224;112;224;21 + + + com.umlet.element.Class + + 476 + 294 + 77 + 28 + + Misc <<lib>> +-- +/Is used globaly/ +bg=blue + + + + com.umlet.element.Relation + + 539 + 273 + 90 + 76 + + lt=<- + 21;63;56;63;56;21;77;21 + + + UMLClass + + 105 + 168 + 245 + 140 + + /*HISTORY*/ +-- +10/2-2014 +Renamed DanBiasClientLauncher -> GameLauncher +Removed DanBiasServerLauncher - connected to GameClient +Added missing cconnections +Specified what type of box and added a colour +-- +elementstyle=wordwrap +bg=gray + + + + + com.umlet.element.Relation + + 749 + 189 + 34 + 62 + + lt=<- + 21;49;21;21 + + + com.umlet.element.Class + + 504 + 189 + 91 + 28 + + ServerUI <<exe>> +-- +/template for future/ bg=green - com.umlet.element.Class + com.umlet.element.Relation - 671 - 253 - 132 - 33 + 525 + 196 + 34 + 55 - Math - + lt=<- + 21;42;21;21 com.umlet.element.Relation - 770 - 132 - 153 - 164 + 539 + 308 + 90 + 48 lt=<- - 33;143;132;143;132;33 - - - com.umlet.element.Class - - 682 - 297 - 99 - 33 - - Misc - + 21;35;63;35;63;21;77;21 com.umlet.element.Relation - 605 - 198 - 87 - 98 + 532 + 273 + 97 + 41 lt=<- - 66;77;44;77;44;33;33;33 + 21;28;56;28;56;21;84;21 diff --git a/Code/Dokumentation/GameServer.uxf b/Code/Dokumentation/GameServer.uxf index 735a2592..890e2cbb 100644 --- a/Code/Dokumentation/GameServer.uxf +++ b/Code/Dokumentation/GameServer.uxf @@ -1,13 +1,13 @@ - - 10 + + 8 UMLClass - 610 - 340 - 100 - 30 + 632 + 344 + 104 + 24 GameLobby @@ -16,137 +16,100 @@ UMLClass - 580 - 480 - 160 - 80 + 624 + 416 + 128 + 48 GameSession -- /One instance of a game/ -/including x number of/ -/players./ +/including n players./ com.umlet.element.Relation - 620 - 340 - 60 - 160 + 664 + 344 + 40 + 88 lt=->>>> - 30;140;40;30 + 24;72;24;24 com.umlet.element.Relation - 710 - 480 - 100 - 50 + 664 + 440 + 40 + 104 lt=>>>>- - 80;30;30;30 + 24;88;24;24 UMLClass - 600 - 180 - 120 - 120 + 40 + 120 + 368 + 344 - GameServer + GameServerAPI <<singleton>> +-- +{innerclass ++ServerInitDesc<<struct>> +-- +serverName :char pointer +listenPort :int +bool broadcast :bool +ServerInitDesc() :void +innerclass} +{innerclass ++GameServerInfo<<struct>> +-- +listenPort :unsigned int +serverIp :const char pointer +innerclass} + ++static DanBiasServerReturn ServerInitiate(const ServerInitDesc& desc); ++static ServerStart() :void ++static ServerStop() :void ++static ServerUpdate() :void ++static ServerGetInfo() :GameServerInfo ++static ServerIsRunning() :bool ++static GameSetMapId( val :const int& ) :void ++static GameSetMaxClients( val :const int& ) :void ++static GameSetGameMode(val :const int&) :void ++static GameSetGameTime(val :const int&) :void ++static GameGetMapId() :int ++static GameGetMaxClients() :int ++static GameGetGameMode() :int ++static GameGetGameTime() :int ++static GameGetGameName() :const char pointer ++static GameStart() :bool com.umlet.element.Relation - 630 - 270 - 50 - 90 - - lt=>>>>- - 30;70;30;30 - - - UMLClass - - 590 - 100 - 130 + 384 + 328 + 264 40 - <<wrapper>> -DanBiasServerAPI - - - - com.umlet.element.Relation - - 630 - 110 - 50 - 90 - - lt=>>>>- - - 30;70;30;30 - - - UMLClass - - 1060 - 330 - 120 - 50 - - NetworkSession - - - - com.umlet.element.Relation - - 690 - 220 - 390 - 50 - - lt=-<<<< - 30;30;370;30 - - - com.umlet.element.Relation - - 680 - 320 - 400 - 50 - - lt=->>>>> - 30;30;380;30 - - - com.umlet.element.Relation - - 690 - 340 - 390 - 160 - - lt=->>>>> - 30;140;40;40;370;30 + lt=>>>>- + 248;24;24;24 com.umlet.element.Package - 460 - 640 - 120 - 50 + 440 + 424 + 96 + 40 GameLogicAPI bg=blue @@ -155,21 +118,21 @@ bg=blue com.umlet.element.Relation - 370 - 530 - 350 - 290 + 512 + 424 + 128 + 40 lt=<<. - 90;150;30;270;330;240;240;30 + 24;24;112;24 UMLClass - 790 - 500 - 100 - 30 + 624 + 528 + 144 + 24 GameClient @@ -177,21 +140,21 @@ bg=blue com.umlet.element.Relation - 670 - 530 - 150 - 180 + 520 + 416 + 120 + 104 lt=<<. - 130;160;30;30 + 24;88;64;88;64;24;104;24 com.umlet.element.Package - 800 - 670 - 120 - 40 + 448 + 480 + 96 + 48 GameProtocols bg=#aaaaa @@ -200,10 +163,10 @@ bg=#aaaaa com.umlet.element.Package - 1040 - 200 - 160 - 190 + 720 + 160 + 152 + 24 NetworkAPI bg=#a21aff @@ -212,56 +175,84 @@ bg=#a21aff UMLClass - 1060 - 280 - 120 - 40 + 40 + 24 + 320 + 64 - NetworkClient - - - - UMLClass - - 1060 - 230 - 120 - 40 - - NetworkServer + /*HISTORY*/ +-- +10/2-2014 +Restructured old +-- +elementstyle=wordwrap +bg=gray com.umlet.element.Relation - 690 - 240 - 390 - 80 + 720 + 160 + 40 + 272 - lt=-> - 30;30;200;30;200;60;370;60 + lt=<<. + 24;24;24;256 com.umlet.element.Relation - 690 - 260 - 390 - 100 + 704 + 160 + 40 + 200 - lt=-<<<< - 30;30;180;30;180;80;370;80 + lt=<<. + 24;24;24;184 com.umlet.element.Relation - 860 - 270 - 380 - 260 + 384 + 152 + 352 + 40 - lt=>>>- - 320;30;360;30;360;230;30;240 + lt=<<. + 336;24;24;24 + + + com.umlet.element.Relation + + 736 + 160 + 40 + 384 + + lt=<<. + 24;24;24;368 + + + com.umlet.element.Relation + + 520 + 480 + 136 + 64 + + lt=<<. + 24;24;120;24;120;48 + + + com.umlet.element.Relation + + 512 + 432 + 160 + 112 + + lt=<<. + 24;24;72;24;72;72;144;72;144;96 diff --git a/Code/Dokumentation/Resource.uxf b/Code/Dokumentation/Resource.uxf index c62ae895..1258c9af 100644 --- a/Code/Dokumentation/Resource.uxf +++ b/Code/Dokumentation/Resource.uxf @@ -1,13 +1,13 @@ - - 16 + + 6 com.umlet.element.Class - 560 - 80 - 176 - 80 + 198 + 300 + 66 + 30 <<interface>> OysterResource @@ -16,23 +16,23 @@ OysterResource com.umlet.element.Relation - 528 - 112 - 206 - 160 + 186 + 312 + 76 + 60 lt=>> implements - 112;128;112;48 + 42;48;42;18 com.umlet.element.Actor - 352 - 240 - 128 - 192 + 120 + 360 + 48 + 72 Dev @@ -40,22 +40,22 @@ implements com.umlet.element.Relation - 320 - 32 - 272 - 240 + 108 + 282 + 102 + 90 lt=<. interacts> - 240;80;96;80;96;208 + 90;30;36;30;36;78 com.umlet.element.Class - 576 - 576 - 160 - 32 + 204 + 486 + 60 + 12 CustomLoader @@ -63,10 +63,10 @@ interacts> com.umlet.element.Class - 576 - 528 - 160 - 32 + 204 + 468 + 60 + 12 ByteLoader @@ -75,33 +75,33 @@ ByteLoader com.umlet.element.Relation - 464 - 384 - 144 - 192 + 162 + 414 + 54 + 72 lt=<<- - 80;48;48;48;48;160;112;160 + 30;18;18;18;18;60;42;60 com.umlet.element.Relation - 368 - 384 - 266 - 240 + 126 + 414 + 98 + 90 lt=<<- implements partly - 176;48;144;48;144;208;208;208 + 66;18;54;18;54;78;78;78 UMLClass - 544 - 240 - 208 - 128 + 192 + 360 + 78 + 48 -- <<interface>> @@ -115,10 +115,10 @@ halign=center UMLClass - 544 - 400 - 208 - 80 + 192 + 420 + 78 + 30 OResource @@ -130,13 +130,171 @@ halign=center com.umlet.element.Relation - 688 - 256 - 196 - 224 + 252 + 366 + 66 + 84 lt=>>>> manages> - 64;192;112;192;112;48;64;48 + 18;72;36;72;36;18;18;18 + + + UMLClass + + 108 + 282 + 240 + 234 + + old +bg=gray + + + + UMLClass + + 402 + 342 + 576 + 204 + + ResourceManager +-- ++ ResourceManager() :void ++ ~ResourceManager() :void ++ HBYTEARRAY LoadBytes(const wchar_t filename[], ResourceType type, int customId = -1, bool force = false) ++ HRESOURCE LoadResource(const wchar_t filename[], LoadFunction loadFnc = 0, UnloadFunction unloadFnc = 0, int customId = -1, bool force = false) ++ HRESOURCE ReloadResource(const wchar_t filename[]) ++ HRESOURCE ReloadResource(HRESOURCE& resource) ++ void Clean() ++ void ReleaseResource(const HRESOURCE& resource) ++ void ReleaseResource(const wchar_t filename[]) ++ void SetResourceId(const HRESOURCE& resource, unsigned int id) ++ void SetResourceId(const wchar_t filename[], unsigned int id) ++ ResourceType GetResourceType(const HRESOURCE& resource) ++ ResourceType GetResourceType (const wchar_t filename[]) ++ const wchar_t* GetResourceFilename(const HRESOURCE& resource); ++ HRESOURCE GetResourceHandle(const wchar_t filename[]) ++ int GetResourceId(const HRESOURCE& resource); ++ int GetResourceId(const wchar_t filename[]); +-- +- ResourceManager(const ResourceManager& obj); +- const ResourceManager& operator=(const ResourceManager&); +- std::map<std::wstring, ResourceData*> resources; + + + + UMLClass + + 390 + 198 + 600 + 360 + + Oyster <<namespace>> +-- + + + + + UMLClass + + 396 + 222 + 588 + 330 + + Resource <<namespace>> +-- + + + + + UMLClass + + 534 + 282 + 126 + 18 + + HRESOURCE: void* <<typedef>> + + + + UMLClass + + 534 + 300 + 126 + 18 + + HBYTE: char <<typedef>> + + + + UMLClass + + 534 + 318 + 126 + 18 + + HBYTEARRAY: char* <<typedef>> + + + + UMLClass + + 534 + 246 + 264 + 18 + + UnloadFunction :void(*UnloadFunction)(void* loadedData) <<typedef>> + + + + UMLClass + + 534 + 264 + 288 + 18 + + LoadFunction :void*(*LoadFunction)(const wchar_t filename[]) <<typedef>> + + + + UMLClass + + 402 + 246 + 126 + 90 + + ResourceType <<enum>> +-- +ResourceType_Byte_Raw +ResourceType_Byte_ANSI +ResourceType_Byte_UTF8 +ResourceType_Byte_UNICODE +ResourceType_Byte_UTF16LE +ResourceType_CUSTOM +ResourceType_INVALID + + + + + UMLClass + + 378 + 174 + 630 + 396 + + New +bg=green + diff --git a/Code/Game/DanBiasGame/GameClientState/C_Object.cpp b/Code/Game/DanBiasGame/GameClientState/C_Object.cpp index c5078224..3f9e08c1 100644 --- a/Code/Game/DanBiasGame/GameClientState/C_Object.cpp +++ b/Code/Game/DanBiasGame/GameClientState/C_Object.cpp @@ -79,7 +79,7 @@ int C_Object::GetId() const } void C_Object::Render() { - Oyster::Graphics::API::RenderModel(*(model)); + Oyster::Graphics::API::RenderModel(model); } void C_Object::Release() { diff --git a/Code/Game/DanBiasGame/GameClientState/C_obj/C_DynamicObj.cpp b/Code/Game/DanBiasGame/GameClientState/C_obj/C_DynamicObj.cpp index e654348f..961ab379 100644 --- a/Code/Game/DanBiasGame/GameClientState/C_obj/C_DynamicObj.cpp +++ b/Code/Game/DanBiasGame/GameClientState/C_obj/C_DynamicObj.cpp @@ -14,4 +14,4 @@ C_DynamicObj::~C_DynamicObj(void) void C_DynamicObj::Init(ModelInitData modelInit) { C_Object::Init(modelInit); -} +} \ No newline at end of file diff --git a/Code/Game/DanBiasGame/GameClientState/C_obj/C_DynamicObj.h b/Code/Game/DanBiasGame/GameClientState/C_obj/C_DynamicObj.h index f73514da..ecb874d1 100644 --- a/Code/Game/DanBiasGame/GameClientState/C_obj/C_DynamicObj.h +++ b/Code/Game/DanBiasGame/GameClientState/C_obj/C_DynamicObj.h @@ -14,4 +14,4 @@ public: void Init(ModelInitData modelInit); };};}; -#endif +#endif \ No newline at end of file diff --git a/Code/Game/DanBiasGame/GameClientState/C_obj/C_Player.cpp b/Code/Game/DanBiasGame/GameClientState/C_obj/C_Player.cpp index 02cc58fc..d30fcf24 100644 --- a/Code/Game/DanBiasGame/GameClientState/C_obj/C_Player.cpp +++ b/Code/Game/DanBiasGame/GameClientState/C_obj/C_Player.cpp @@ -16,4 +16,4 @@ C_Player::~C_Player(void) void C_Player::Init(ModelInitData modelInit) { C_Object::Init(modelInit); -} +} \ No newline at end of file diff --git a/Code/Game/DanBiasGame/GameClientState/C_obj/C_Player.h b/Code/Game/DanBiasGame/GameClientState/C_obj/C_Player.h index 65a7e498..9d7c3de0 100644 --- a/Code/Game/DanBiasGame/GameClientState/C_obj/C_Player.h +++ b/Code/Game/DanBiasGame/GameClientState/C_obj/C_Player.h @@ -15,4 +15,3 @@ public: };};}; #endif - diff --git a/Code/Game/DanBiasGame/GameClientState/C_obj/C_StaticObj.cpp b/Code/Game/DanBiasGame/GameClientState/C_obj/C_StaticObj.cpp index 9b13c460..a61768e4 100644 --- a/Code/Game/DanBiasGame/GameClientState/C_obj/C_StaticObj.cpp +++ b/Code/Game/DanBiasGame/GameClientState/C_obj/C_StaticObj.cpp @@ -1,4 +1,3 @@ - #include "C_StaticObj.h" #include "DllInterfaces/GFXAPI.h" using namespace DanBias::Client; diff --git a/Code/Game/DanBiasGame/GameClientState/C_obj/C_UIobject.cpp b/Code/Game/DanBiasGame/GameClientState/C_obj/C_UIobject.cpp index 570fa22f..5ed3bc36 100644 --- a/Code/Game/DanBiasGame/GameClientState/C_obj/C_UIobject.cpp +++ b/Code/Game/DanBiasGame/GameClientState/C_obj/C_UIobject.cpp @@ -13,4 +13,4 @@ C_UIobject::~C_UIobject(void) void C_UIobject::Init(ModelInitData modelInit) { C_Object::Init(modelInit); -} +} \ No newline at end of file diff --git a/Code/Game/DanBiasGame/GameClientState/GameState.cpp b/Code/Game/DanBiasGame/GameClientState/GameState.cpp index 4bfeceee..2a9d6746 100644 --- a/Code/Game/DanBiasGame/GameClientState/GameState.cpp +++ b/Code/Game/DanBiasGame/GameClientState/GameState.cpp @@ -50,34 +50,34 @@ bool GameState::Init(Oyster::Network::NetworkClient* nwClient) GameState::gameStateState GameState::LoadGame() { Oyster::Graphics::Definitions::Pointlight plight; - plight.Pos = Float3(315, 0 ,5); - plight.Color = Float3(0.9f,0.7f,0.2f); - plight.Radius = 100; + plight.Pos = Oyster::Math::Float3(315.0f, 0.0f ,5.0f); + plight.Color = Oyster::Math::Float3(0.9f,0.7f,0.2f); + plight.Radius = 100.0f; plight.Bright = 0.9f; Oyster::Graphics::API::AddLight(plight); - plight.Pos = Float3(10,350,5); - plight.Color = Float3(0.9f,0.7f,0.3f); - plight.Radius = 200; + plight.Pos = Oyster::Math::Float3(10.0f,350.0f,5.0f); + plight.Color = Oyster::Math::Float3(0.9f,0.7f,0.3f); + plight.Radius = 200.0f; plight.Bright = 0.7f; Oyster::Graphics::API::AddLight(plight); - plight.Pos = Float3(350,350,5); - plight.Color = Float3(0.9f,0.7f,0.3f); - plight.Radius = 200; + plight.Pos = Oyster::Math::Float3(350.0f,350.0f,5.0f); + plight.Color = Oyster::Math::Float3(0.9f,0.7f,0.3f); + plight.Radius = 200.0f; plight.Bright = 0.7f; Oyster::Graphics::API::AddLight(plight); - plight.Pos = Float3(10,350,350); - plight.Color = Float3(0.9f,0.7f,0.3f); - plight.Radius = 200; + plight.Pos = Oyster::Math::Float3(10.0f,350.0f,350.0f); + plight.Color = Oyster::Math::Float3(0.9f,0.7f,0.3f); + plight.Radius = 200.0f; plight.Bright = 0.7f; Oyster::Graphics::API::AddLight(plight); - plight.Pos = Float3(10,-15,5); - plight.Color = Float3(0,0,1); - plight.Radius = 50; - plight.Bright = 2; + plight.Pos = Oyster::Math::Float3(10.0f,-15.0f,5.0f); + plight.Color = Oyster::Math::Float3(0.0f,0.0f,1.0f); + plight.Radius = 50.0f; + plight.Bright = 2.0f; Oyster::Graphics::API::AddLight(plight); - // use level loader - //LoadModels("3bana.bias"); + LoadModels(); + InitCamera(Oyster::Math::Float3(0.0f,0.0f,20.0f)); // hardcoded objects LoadModels(); Float3 startPos = Float3(0,0,20.0f); diff --git a/Code/Misc/Misc.vcxproj b/Code/Misc/Misc.vcxproj index 593de858..7cdab4af 100644 --- a/Code/Misc/Misc.vcxproj +++ b/Code/Misc/Misc.vcxproj @@ -149,10 +149,30 @@ - - - - + + false + false + false + false + + + false + false + false + false + + + false + false + false + false + + + false + false + false + false + false false @@ -179,8 +199,18 @@ - - + + false + false + false + false + + + false + false + false + false + false false diff --git a/Code/Misc/Resource/ResourceManager.h b/Code/Misc/Resource/ResourceManager.h index 4c90966e..d5684538 100644 --- a/Code/Misc/Resource/ResourceManager.h +++ b/Code/Misc/Resource/ResourceManager.h @@ -13,6 +13,7 @@ namespace Oyster typedef void* HRESOURCE; typedef char HBYTE; typedef HBYTE* HBYTEARRAY; + /** Typedef on a fuction required for custom unloading */ typedef void(*UnloadFunction)(void* loadedData); diff --git a/Code/OysterGraphics/Core/Buffer.cpp b/Code/OysterGraphics/Core/Buffer.cpp index d6994554..6cef2b17 100644 --- a/Code/OysterGraphics/Core/Buffer.cpp +++ b/Code/OysterGraphics/Core/Buffer.cpp @@ -155,6 +155,10 @@ HRESULT Core::Buffer::Init(const BUFFER_INIT_DESC& initDesc) { //MessageBox(NULL, L"Unable to create buffer.", L"Slenda Error", MB_ICONERROR | MB_OK); } + else + { + Core::UsedMem += bufferDesc.ByteWidth; + } return hr; } diff --git a/Code/OysterGraphics/Core/Core.cpp b/Code/OysterGraphics/Core/Core.cpp index f2392f4c..8cb4c5e0 100644 --- a/Code/OysterGraphics/Core/Core.cpp +++ b/Code/OysterGraphics/Core/Core.cpp @@ -33,4 +33,6 @@ Oyster::Math::Float2 Core::resolution = Oyster::Math::Float2::null; ID3D11ShaderResourceView* Core::srvNULL[16] = {0}; ID3D11RenderTargetView* Core::rtvNULL[8] = {0}; -ID3D11UnorderedAccessView* Core::uavNULL[8] = {0}; \ No newline at end of file +ID3D11UnorderedAccessView* Core::uavNULL[8] = {0}; + +int Core::UsedMem = 0; diff --git a/Code/OysterGraphics/Core/Core.h b/Code/OysterGraphics/Core/Core.h index 050d54c5..eb420c04 100644 --- a/Code/OysterGraphics/Core/Core.h +++ b/Code/OysterGraphics/Core/Core.h @@ -46,6 +46,8 @@ namespace Oyster static ID3D11RenderTargetView* rtvNULL[8]; static ID3D11UnorderedAccessView* uavNULL[8]; + static int UsedMem; + class Buffer { public: diff --git a/Code/OysterGraphics/Core/Init.cpp b/Code/OysterGraphics/Core/Init.cpp index 05a91a59..47731dbf 100644 --- a/Code/OysterGraphics/Core/Init.cpp +++ b/Code/OysterGraphics/Core/Init.cpp @@ -33,7 +33,7 @@ namespace Oyster createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; #endif - createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; + //createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; D3D_FEATURE_LEVEL featureLevelsToTry[] = { @@ -110,6 +110,7 @@ namespace Oyster if(Core::swapChain) { Core::swapChain->Release(); + Core::UsedMem -= desc.BufferDesc.Height * desc.BufferDesc.Width * 16; delete Core::swapChain; } @@ -167,7 +168,7 @@ namespace Oyster } dxgiFactory->Release(); - + Core::UsedMem += desc.BufferDesc.Height * desc.BufferDesc.Width * 16; return Init::Success; } @@ -187,6 +188,7 @@ namespace Oyster if(Core::depthStencil) { Core::depthStencil->Release(); + Core::UsedMem -= desc.Height * desc.Width * 4; delete Core::depthStencil; } @@ -214,6 +216,7 @@ namespace Oyster { return Init::Fail; } + Core::UsedMem += desc.Height * desc.Width * 4; D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc; dsvDesc.Format = DXGI_FORMAT_D32_FLOAT; dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; @@ -382,6 +385,9 @@ namespace Oyster if(FAILED(Core::device->CreateTexture2D(&texDesc,NULL,&tex))) return State::Fail; + + Core::UsedMem += texDesc.Height*texDesc.Width*16; + if(rtv) { D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; diff --git a/Code/OysterGraphics/Definitions/GraphicalDefinition.h b/Code/OysterGraphics/Definitions/GraphicalDefinition.h index d84f7506..7c0d76d7 100644 --- a/Code/OysterGraphics/Definitions/GraphicalDefinition.h +++ b/Code/OysterGraphics/Definitions/GraphicalDefinition.h @@ -18,6 +18,8 @@ namespace Oyster { Math::Matrix WV; Math::Matrix WVP; + int Animated; + Math::Float3 Pad; }; struct FinalVertex @@ -51,11 +53,19 @@ namespace Oyster struct AnimationData { - Math::Float4x4 animatedData[100]; - int Animated; - Math::Float3 Pad; + Math::Float4x4 AnimatedData[100]; }; + struct GuiData + { + Math::Matrix Translation; + }; + + struct PostData + { + int x; + int y; + }; } } } \ No newline at end of file diff --git a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp index 2d9c3dc6..5a92f0de 100644 --- a/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp +++ b/Code/OysterGraphics/DllInterfaces/GFXAPI.cpp @@ -1,13 +1,12 @@ #include "GFXAPI.h" #include "../Core/Core.h" -#include "../Render/Resources/Debug.h" -#include "../Render/Resources/Deffered.h" -#include "../Render/Rendering/Render.h" +#include "../Render/Resources.h" +#include "../Render/DefaultRenderer.h" #include "../FileLoader/ObjReader.h" -//#include "../../Misc/Resource/OysterResource.h" #include "../../Misc/Resource/ResourceManager.h" #include "../FileLoader/GeneralLoader.h" #include "../Model/ModelInfo.h" +#include "../Render/GuiRenderer.h" #include namespace Oyster @@ -19,6 +18,7 @@ namespace Oyster Math::Float4x4 View; Math::Float4x4 Projection; std::vector Lights; + float deltaTime; } API::State API::Init(HWND Window, bool MSAA_Quality, bool Fullscreen, Math::Float2 resulotion) @@ -29,18 +29,20 @@ namespace Oyster { return API::Fail; } - Render::Resources::Deffered::Init(); + Render::Resources::Init(); Render::Preparations::Basic::SetViewPort(); + Render::DefaultRenderer::cube = API::CreateModel(L"box.dan"); + Render::DefaultRenderer::cube2 = API::CreateModel(L"box2.dan"); return API::Sucsess; } - void API::SetProjection(Math::Float4x4& projection) + void API::SetProjection(const Math::Float4x4& projection) { Projection = projection; } - void API::SetView(Math::Float4x4& view) + void API::SetView(const Math::Float4x4& view) { View = view; } @@ -49,27 +51,27 @@ namespace Oyster { if(Lights.size()) { - Render::Rendering::Basic::NewFrame(View, Projection, &Lights[0], (int)Lights.size()); + Render::DefaultRenderer::NewFrame(View, Projection, Lights[0], (int)Lights.size()); } else { - Render::Rendering::Basic::NewFrame(View, Projection, NULL, 0); + Render::DefaultRenderer::NewFrame(View, Projection, Definitions::Pointlight(), 0); } } void API::RenderScene(Model::Model models[], int count) { - Render::Rendering::Basic::RenderScene(models,count, View, Projection); + Render::DefaultRenderer::RenderScene(models,count, View, Projection, deltaTime); } - void API::RenderModel(Model::Model& m) + void API::RenderModel(Model::Model* m) { - Render::Rendering::Basic::RenderScene(&m,1, View, Projection); + Render::DefaultRenderer::RenderScene(m,1, View, Projection, deltaTime); } void API::EndFrame() { - Render::Rendering::Basic::EndFrame(); + Render::DefaultRenderer::EndFrame(); } API::State API::SetOptions(API::Option option) @@ -85,7 +87,7 @@ namespace Oyster Model::Model* m = new Model::Model(); m->WorldMatrix = Oyster::Math::Float4x4::identity; m->Visible = true; - m->AnimationPlaying = -1; + m->Animation.AnimationPlaying = NULL; m->info = (Model::ModelInfo*)Core::loader.LoadResource((Core::modelPath + filename).c_str(),Oyster::Graphics::Loading::LoadDAN, Oyster::Graphics::Loading::UnloadDAN); Model::ModelInfo* mi = (Model::ModelInfo*)m->info; @@ -109,10 +111,12 @@ namespace Oyster void API::Clean() { + DeleteModel(Render::DefaultRenderer::cube); + DeleteModel(Render::DefaultRenderer::cube2); SAFE_DELETE(Core::viewPort); Core::loader.Clean(); Oyster::Graphics::Core::PipelineManager::Clean(); - Oyster::Graphics::Render::Resources::Deffered::Clean(); + Oyster::Graphics::Render::Resources::Clean(); SAFE_RELEASE(Core::depthStencil); SAFE_RELEASE(Core::depthStencilUAV); @@ -137,9 +141,51 @@ namespace Oyster #ifdef _DEBUG API::State API::ReloadShaders() { - Render::Resources::Deffered::InitShaders(); + Render::Resources::InitShaders(); return State::Sucsess; } #endif + + API::Option API::GetOption() + { + Option o; + o.BytesUsed = Core::UsedMem; + o.modelPath = Core::modelPath; + o.texturePath = Core::texturePath; + return o; + } + + void API::StartGuiRender() + { + Render::Rendering::Gui::BeginRender(); + } + + void API::RenderGuiElement(API::Texture tex, Math::Float2 pos, Math::Float2 size) + { + Render::Rendering::Gui::Render((ID3D11ShaderResourceView*)tex,pos,size); + } + + API::Texture API::CreateTexture(std::wstring filename) + { + return Core::loader.LoadResource((Core::texturePath + filename).c_str(),Oyster::Graphics::Loading::LoadTexture, Oyster::Graphics::Loading::UnloadTexture); + } + + void API::DeleteTexture(API::Texture tex) + { + Core::loader.ReleaseResource(tex); + } + + float API::PlayAnimation(Model::Model* m, std::wstring name,bool looping) + { + m->Animation.AnimationPlaying = &(*m->info->Animations.find(name)).second; + m->Animation.AnimationTime=0; + m->Animation.LoopAnimation = looping; + return m->Animation.AnimationPlaying->duration; + } + + void API::Update(float dt) + { + deltaTime = dt; + } } } \ No newline at end of file diff --git a/Code/OysterGraphics/DllInterfaces/GFXAPI.h b/Code/OysterGraphics/DllInterfaces/GFXAPI.h index 81a3bedc..65f82460 100644 --- a/Code/OysterGraphics/DllInterfaces/GFXAPI.h +++ b/Code/OysterGraphics/DllInterfaces/GFXAPI.h @@ -27,7 +27,9 @@ namespace Oyster struct Option { std::wstring modelPath, texturePath; + int BytesUsed; }; + typedef void* Texture; static State Init(HWND Window, bool MSAA_Quality, bool Fullscreen, Oyster::Math::Float2 StartResulotion); #ifdef _DEBUG @@ -40,16 +42,23 @@ namespace Oyster static void Clean(); //! @brief Sets the view matrix to use next frame - static void SetView(Oyster::Math::Float4x4& View); + static void SetView(const Oyster::Math::Float4x4& View); //! @brief Sets the projection matrix to use next frame - static void SetProjection(Oyster::Math::Float4x4& Projection); + static void SetProjection(const Oyster::Math::Float4x4& Projection); //! @brief will internally use last values from SetView and SetProjection static void NewFrame(); //! @brief Renders a list of models static void RenderScene(Oyster::Graphics::Model::Model models[], int count); //! @brief Renders a single model - static void RenderModel(Oyster::Graphics::Model::Model& model); + static void RenderModel(Oyster::Graphics::Model::Model* model); + + //! @brief Configures Renderer to process 2D graphics, data will be passed in to EndFrame() + static void StartGuiRender(); + + //! @brief Renders a single GUI element using the texture provided and the Pos in the center, %based system + static void RenderGuiElement(Texture, Math::Float2 Pos, Math::Float2 Size); + //! @brief Performs light calculations, post effects and presents the scene static void EndFrame(); @@ -58,13 +67,25 @@ namespace Oyster //! @brief deletes a model and relases the models resources static void DeleteModel(Oyster::Graphics::Model::Model* model); + static Texture CreateTexture(std::wstring filename); + static void DeleteTexture(Texture); + //! @brief adds a light to the scene - static void AddLight(Definitions::Pointlight light); + static void AddLight(const Definitions::Pointlight light); //! @brief removes all lights from the scene static void ClearLights(); - //! @brief Sets Options to the graphics, note: currently unused + //! @brief Sets Options to the graphics static State SetOptions(Option); + + //! @brief Gets Options from the graphics + static Option GetOption(); + + //! @brief Starts an animation and returns the time of the animation + static float PlayAnimation(Model::Model* model, std::wstring name, bool looping = false); + + //! @brief Moves all animating models forward the specified time; + static void Update(float deltaTime); }; } } diff --git a/Code/OysterGraphics/FileLoader/DanLoader.cpp b/Code/OysterGraphics/FileLoader/DanLoader.cpp index 0eff143a..99302266 100644 --- a/Code/OysterGraphics/FileLoader/DanLoader.cpp +++ b/Code/OysterGraphics/FileLoader/DanLoader.cpp @@ -135,22 +135,23 @@ void Oyster::Graphics::Loading::UnloadDAN(void* data) if(info->Animated) { //clean animation - delete[] info->bones; - for(int a = 0; a < info->AnimationCount; ++a) + for(auto a = info->Animations.begin(); a != info->Animations.end(); ++a) { - for(int x = 0; x < info->Animations[a].Bones; ++x) + for(int x = 0; x < (*a).second.Bones; ++x) { - delete[] info->Animations[a].Keyframes[x]; + delete[] (*a).second.Keyframes[x]; } - delete[] info->Animations[a].Frames; - delete[] info->Animations[a].Keyframes; + delete[] (*a).second.Frames; + delete[] (*a).second.Keyframes; } - delete[] info->Animations; + info->Animations.clear(); } - for(int i =0;iMaterial.size();++i) + for(UINT i =0;iMaterial.size();++i) { Core::loader.ReleaseResource(info->Material[i]); } + if(info->BoneCount>0) + delete[] info->bones; delete info; } @@ -179,6 +180,7 @@ void* Oyster::Graphics::Loading::LoadDAN(const wchar_t filename[]) Oyster::Graphics::Model::ModelInfo* modelInfo = new Oyster::Graphics::Model::ModelInfo(); modelInfo->Indexed = false; modelInfo->Animated = false; + modelInfo->BoneCount = 0; // Open file in binary mode std::ifstream danFile; danFile.open(filename, std::ios::binary); @@ -349,7 +351,7 @@ void* Oyster::Graphics::Loading::LoadDAN(const wchar_t filename[]) Oyster::Graphics::Model::Animation* anims = new Oyster::Graphics::Model::Animation[animationHeader.numAnims]; - for(int a = 0; a < animationHeader.numAnims; ++a) + for(UINT a = 0; a < animationHeader.numAnims; ++a) { //read name of animation int nameLength; @@ -362,9 +364,6 @@ void* Oyster::Graphics::Loading::LoadDAN(const wchar_t filename[]) name[nameLength] = 0; wchar_t* wName = charToWChar(name); - anims[a].name = std::wstring(wName); - delete[] wName; - delete name; //read nr of bones in animation ReadData(&anims[a].Bones,danFile,4); @@ -397,17 +396,18 @@ void* Oyster::Graphics::Loading::LoadDAN(const wchar_t filename[]) anims[a].Keyframes[b][f].bone.Parent = boneIndex; //read bone transform - ReadData(&anims[a].Keyframes[b][f].bone.Transform,danFile,sizeof(Oyster::Math::Matrix)); - + ReadData(&anims[a].Keyframes[b][f].bone.Relative, danFile, sizeof(Math::Matrix)); ReadData(&anims[a].Keyframes[b][f].time,danFile,sizeof(double)); } } - } - modelInfo->AnimationCount = animationHeader.numAnims; - modelInfo->Animations = anims; - modelInfo->Animated = true; + modelInfo->Animations.insert(std::pair(std::wstring(wName), anims[a])); + delete[] wName; + delete name; + } + modelInfo->Animated = true; + delete[] anims; break; } } diff --git a/Code/OysterGraphics/FileLoader/ModelLoader.cpp b/Code/OysterGraphics/FileLoader/ModelLoader.cpp index b7b8b09a..96fa0362 100644 --- a/Code/OysterGraphics/FileLoader/ModelLoader.cpp +++ b/Code/OysterGraphics/FileLoader/ModelLoader.cpp @@ -70,7 +70,7 @@ void Oyster::Graphics::Loading::UnloadOBJ(void* data) { SAFE_DELETE(info->Indecies); } - for(int i =0;iMaterial.size();++i) + for(UINT i =0;iMaterial.size();++i) { Core::loader.ReleaseResource(info->Material[i]); } @@ -690,6 +690,7 @@ static HRESULT CreateTextureFromWIC( _In_ ID3D11Device* d3dDevice, SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; SRVDesc.Texture2D.MipLevels = (autogen) ? -1 : 1; + //TODO calc mipmap data hr = d3dDevice->CreateShaderResourceView( tex, &SRVDesc, textureView ); if ( FAILED(hr) ) @@ -697,6 +698,9 @@ static HRESULT CreateTextureFromWIC( _In_ ID3D11Device* d3dDevice, tex->Release(); return hr; } + //todo check calc + int TexSize = twidth * theight * bpp; + Oyster::Graphics::Core::UsedMem += TexSize; if ( autogen ) { diff --git a/Code/OysterGraphics/FileLoader/ShaderLoader.cpp b/Code/OysterGraphics/FileLoader/ShaderLoader.cpp index 5edc86dd..033be403 100644 --- a/Code/OysterGraphics/FileLoader/ShaderLoader.cpp +++ b/Code/OysterGraphics/FileLoader/ShaderLoader.cpp @@ -146,6 +146,7 @@ namespace Oyster return NULL; } #endif + Core::UsedMem += data.size; return Core::PipelineManager::CreateShader(data, Core::PipelineManager::ShaderType(type)); } } diff --git a/Code/OysterGraphics/Model/Model.h b/Code/OysterGraphics/Model/Model.h index f4639c74..590d7d6a 100644 --- a/Code/OysterGraphics/Model/Model.h +++ b/Code/OysterGraphics/Model/Model.h @@ -10,13 +10,21 @@ namespace Oyster namespace Model { struct ModelInfo; + + struct Animation; + + struct AnimationData + { + Animation* AnimationPlaying; + float AnimationTime; + bool LoopAnimation; + }; struct Model { ModelInfo* info; Oyster::Math::Float4x4 WorldMatrix; - bool Visible, LoopAnimation; - int AnimationPlaying; - float AnimationTime; + bool Visible; + AnimationData Animation; }; } diff --git a/Code/OysterGraphics/Model/ModelInfo.h b/Code/OysterGraphics/Model/ModelInfo.h index 3a184f65..a53bcb23 100644 --- a/Code/OysterGraphics/Model/ModelInfo.h +++ b/Code/OysterGraphics/Model/ModelInfo.h @@ -13,7 +13,8 @@ namespace Oyster { struct Bone { - Math::Float4x4 Transform; + Math::Matrix Relative; + Math::Matrix Absolute; int Parent; }; struct Frame @@ -23,7 +24,6 @@ namespace Oyster }; struct Animation { - std::wstring name; int Bones; int* Frames; //! Bone as index Frame** Keyframes; //! @brief [Bone][Frame] @@ -36,7 +36,7 @@ namespace Oyster bool Indexed, Animated; int VertexCount, IndexCount, BoneCount, AnimationCount; Bone* bones; - Animation* Animations; + std::map Animations; }; } } diff --git a/Code/OysterGraphics/OldResourses/Buffers.cpp b/Code/OysterGraphics/OldResourses/Buffers.cpp deleted file mode 100644 index e36b3790..00000000 --- a/Code/OysterGraphics/OldResourses/Buffers.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "Buffers.h" - -namespace Oyster -{ - namespace Resources - { - Buffer Buffers::V2DSprites = Buffer(); - Buffer Buffers::CbufferVS = Buffer(); - Buffer Buffers::CBufferGs = Buffer(); - Buffer Buffers::CBufferPipelineCs = Buffer(); - - void Buffers::Init() - { - Buffer::BUFFER_INIT_DESC desc; - - desc.ElementSize=sizeof(Math::Float2); - desc.NumElements=1; - desc.Type = Buffer::BUFFER_TYPE::VERTEX_BUFFER; - desc.Usage = Buffer::BUFFER_USAGE::BUFFER_DEFAULT; - desc.InitData = &Math::Float2(0,0); - - V2DSprites.Init(desc); - - desc.Type=Buffer::BUFFER_TYPE::CONSTANT_BUFFER_VS; - desc.Usage = Buffer::BUFFER_USAGE::BUFFER_CPU_WRITE_DISCARD; - desc.ElementSize=sizeof(Math::Float4x4); - desc.InitData=0; - - CbufferVS.Init(desc); - - desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_GS; - - CBufferGs.Init(desc); - - desc.ElementSize=sizeof(Oyster::Resources::BufferDefinitions::LightStructureBuffer); - desc.NumElements=1; - desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_CS; - desc.Usage = Buffer::BUFFER_USAGE::BUFFER_CPU_WRITE_DISCARD; - desc.InitData = NULL; - - CBufferPipelineCs.Init(desc); - } - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/Buffers.h b/Code/OysterGraphics/OldResourses/Buffers.h deleted file mode 100644 index ec445b6c..00000000 --- a/Code/OysterGraphics/OldResourses/Buffers.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "../EngineIncludes.h" - -namespace Oyster -{ - namespace Resources - { - struct Buffers - { - static Buffer V2DSprites; - - static Buffer CbufferVS; - - static Buffer CBufferGs; - - static Buffer CBufferPipelineCs; - - static void Init(); - }; - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/GraphicsDefinitions.h b/Code/OysterGraphics/OldResourses/GraphicsDefinitions.h deleted file mode 100644 index 12a85d5f..00000000 --- a/Code/OysterGraphics/OldResourses/GraphicsDefinitions.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - - -#include "..\EngineIncludes.h" - -namespace Oyster -{ - namespace Resources - { - - namespace BufferDefinitions - { - struct LightStructureBuffer - { - ::Oyster::Math::Float4x4 viewMatrix, projectionMatrix; - ::LinearAlgebra::Vector3 numDispatches; - unsigned int reservedPadding; - }; - - struct ScreenTileFrustrum - { - ::Oyster::Math::Float rawElement[6 * 4]; - }; - - class PointLightDescription - { - public: - struct{ ::Oyster::Math::Float3 center; ::Oyster::Math::Float radius; } pos; - ::Oyster::Math::Float3 color; - ::Oyster::Math::Float intensty; - }; - }; - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/Manager.cpp b/Code/OysterGraphics/OldResourses/Manager.cpp deleted file mode 100644 index 47aa5eaf..00000000 --- a/Code/OysterGraphics/OldResourses/Manager.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "Manager.h" - -std::unordered_map< std::string, Oyster::Render::ModelInfo*> Oyster::Resources::Manager::loadedModels = std::unordered_map< std::string, Oyster::Render::ModelInfo*>(); - -Oyster::Render::Model* Oyster::Resources::Manager::LoadModel(std::string Filename, Matrix Scale) -{ - ////TODO: Add redundncy sheck, to ensure not recreating model - - ////Loop to find filename - - ////If found Return Model - - ////else Create Model - - //Oyster::FileLoaders::ObjReader *reader = Oyster::FileLoaders::ObjReader::LoadFile(Filename, Scale); - //Oyster::FileLoaders::ObjReader::Vertex** vertex = new Oyster::FileLoaders::ObjReader::Vertex*[1]; - //int vcount; - //std::map textures; - //reader->GetVertexData( vertex, vcount, textures ); - - //Oyster::Buffer::BUFFER_INIT_DESC desc; - //desc.ElementSize=sizeof(Oyster::FileLoaders::ObjReader::Vertex); - //desc.NumElements = vcount; - //desc.InitData = *vertex; - //desc.Type = Oyster::Buffer::VERTEX_BUFFER; - //desc.Usage = Oyster::Buffer::BUFFER_DEFAULT; - // - //ID3D11ShaderResourceView *srv = textures["Diffuse"]; - - //Oyster::Render::ModelInfo* m = new Oyster::Render::ModelInfo(); - // - //m->Vertices = *(Oyster::Engine::Init::Buffers::CreateBuffer(desc)); - //m->VertexCount = vcount; - //m->Material.push_back(srv); - //srv = textures["Specular"]; - //m->Material.push_back(srv); - //srv = textures["Glow"]; - //m->Material.push_back(srv); - //m->Indexed=false; - // - //Oyster::Render::Model* model = new Oyster::Render::Model(); - //model->info=m; - //model->Visible = true; - //model->World = &Oyster::Math::Float4x4(Oyster::Math::Float4x4::identity); - return NULL; -} - diff --git a/Code/OysterGraphics/OldResourses/Manager.h b/Code/OysterGraphics/OldResourses/Manager.h deleted file mode 100644 index 6de367e3..00000000 --- a/Code/OysterGraphics/OldResourses/Manager.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include "../EngineIncludes.h" -#include - -namespace Oyster -{ - namespace Resources - { - struct Manager - { - //Expects to be deleted either trough manager or after a clean - static Oyster::Render::Model* LoadModel(std::string Filename, Matrix Scale); - static void Clean(); - - private: - static std::unordered_map< std::string, Oyster::Render::ModelInfo*> loadedModels; - }; - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/PipelineResources.cpp b/Code/OysterGraphics/OldResourses/PipelineResources.cpp deleted file mode 100644 index 27947c41..00000000 --- a/Code/OysterGraphics/OldResourses/PipelineResources.cpp +++ /dev/null @@ -1,228 +0,0 @@ -#include "PipelineResources.h" - -using namespace Oyster::Resources; - -ID3D11UnorderedAccessView* PipeLineResourses::TempUav = 0; -ID3D11ShaderResourceView* PipeLineResourses::TempSrv = 0; - -ID3D11ShaderResourceView* PipeLineResourses::GeometryOut[5] = {0}; -ID3D11RenderTargetView* PipeLineResourses::GeometryTarget[5] = {0}; - -ID3D11ShaderResourceView* PipeLineResourses::ComputeResources[4] = {0}; -Oyster::Buffer* PipeLineResourses::Resources[2] = {0}; - -ID3D11ShaderResourceView* PipeLineResourses::LightOut[4] = {0}; -ID3D11UnorderedAccessView* PipeLineResourses::LightTarget[4] = {0}; - -ID3D11RenderTargetView* PipeLineResourses::RtvNulls[16] = {0}; -ID3D11ShaderResourceView* PipeLineResourses::SrvNulls[16] = {0}; -ID3D11UnorderedAccessView* PipeLineResourses::uavNULL[16] = {0}; - -//Oyster::Collision3D::Frustrum* PipeLineResourses::SubFrustrums = 0; -int PipeLineResourses::FrustrumSize = 0; -LinearAlgebra::Vector3 PipeLineResourses::FrustrumDimensions = LinearAlgebra::Vector3(); - -Oyster::Resources::BufferDefinitions::LightStructureBuffer PipeLineResourses::LightData = Oyster::Resources::BufferDefinitions::LightStructureBuffer(); - -void PipeLineResourses::Init(int sizeX, int sizeY) -{ - InitGeometry(sizeX, sizeY); - - InitSSAOData(); - InitSubFrustrums(sizeX, sizeY); - InitPointLights(); - InitLightData(); - - InitLighting(sizeX, sizeY); -} - -void PipeLineResourses::InitGeometry(int sizeX, int sizeY) -{ - D3D11_TEXTURE2D_DESC Tdesc; - Tdesc.Width = sizeX; - Tdesc.Height = sizeY; - Tdesc.MipLevels = Tdesc.ArraySize = 1; - Tdesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; - Tdesc.SampleDesc.Count = 1; - Tdesc.SampleDesc.Quality=0; - Tdesc.Usage = D3D11_USAGE_DEFAULT; - Tdesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; - Tdesc.CPUAccessFlags = 0; - Tdesc.MiscFlags = 0; - - ID3D11Texture2D *pTexture; - HRESULT hr; - - //Geometry stage resourses - for( int i = 0; i < 5; ++i ) - { - hr = Oyster::Core::Device->CreateTexture2D( &Tdesc, NULL, &pTexture ); - hr = Oyster::Core::Device->CreateShaderResourceView(pTexture,0,&GeometryOut[i]); - hr = Oyster::Core::Device->CreateRenderTargetView(pTexture,0,&GeometryTarget[i]); - pTexture->Release(); - } -} - -void PipeLineResourses::InitSSAOData() -{ - //create Half Spheres and Random Data - - Oyster::Buffer::BUFFER_INIT_DESC desc; - HRESULT hr; - - int NrOfSamples = Oyster::Engine::States::GetNrOfSSAOSamples(); - int SampleSpread = Oyster::Engine::States::GetSSAOSampleSpread(); - - Oyster::Math::Vector3* kernel = new Oyster::Math::Vector3[ NrOfSamples ]; - Oyster::Math::Vector3* random = new Oyster::Math::Vector3[ SampleSpread ]; - - for(int i = 0; i < NrOfSamples; ++i) - { - kernel[i] = Oyster::Math::Vector3::null; - while( kernel[i] == Oyster::Math::Vector3::null ) - { - kernel[i] = Oyster::Math::Vector3( - (float)rand() / (RAND_MAX + 1) * (1 - -1) + -1, - (float)rand() / (RAND_MAX + 1) * (1 - -1) + -1, - (float)rand() / (RAND_MAX + 1) * (1 - 0) + 0); - } - kernel[i].Normalize(); - - float scale = float(i) / float(NrOfSamples); - scale = (0.1f*(1 - scale * scale) + 1.0f *( scale * scale)); - kernel[i] *= scale; - - if( i < SampleSpread) - { - random[i] = Oyster::Math::Vector3::null; - while( random[i] == Oyster::Math::Vector3::null ) - { - random[i] = Oyster::Math::Vector3( - (float)rand() / (RAND_MAX + 1) * (1 - -1)+ -1, - (float)rand() / (RAND_MAX + 1) * (1 - -1)+ -1, - 0.0f); - } - random[i].Normalize(); - } - } - - - D3D11_TEXTURE1D_DESC T1desc; - T1desc.Width = NrOfSamples; - T1desc.MipLevels = T1desc.ArraySize = 1; - T1desc.Format = DXGI_FORMAT_R32G32B32_FLOAT; - T1desc.Usage = D3D11_USAGE_DEFAULT; - T1desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; - T1desc.CPUAccessFlags = 0; - T1desc.MiscFlags = 0; - - D3D11_SUBRESOURCE_DATA sphere; - sphere.pSysMem = kernel; - - D3D11_SUBRESOURCE_DATA rnd; - rnd.pSysMem = random; - - - ID3D11Texture1D *pTexture1[2]; - - hr = Oyster::Core::Device->CreateTexture1D( &T1desc, &sphere, &pTexture1[0] ); - hr = Oyster::Core::Device->CreateShaderResourceView( pTexture1[0], 0, &ComputeResources[3] ); - pTexture1[0]->Release(); - delete[] kernel; - - T1desc.Width = SampleSpread; - hr = Oyster::Core::Device->CreateTexture1D( &T1desc, &rnd, &pTexture1[1] ); - hr = Oyster::Core::Device->CreateShaderResourceView( (pTexture1[1]), 0, &ComputeResources[2] ); - pTexture1[1]->Release(); - delete[] random; -} - -void PipeLineResourses::InitSubFrustrums(int sizeX, int sizeY) -{ - FrustrumDimensions.x = (sizeX + 15U) / 16U; - FrustrumDimensions.y = (sizeY + 15U) / 16U; - FrustrumDimensions.z = 1; - FrustrumSize = FrustrumDimensions.x * FrustrumDimensions.y * FrustrumDimensions.z; - //if(SubFrustrums!=0) - //delete[] SubFrustrums; - //SubFrustrums = new Collision3D::Frustrum[ FrustrumSize ]; - - Oyster::Buffer::BUFFER_INIT_DESC desc; - D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; - - //buffer description for SubFrustrums - desc.Usage = Oyster::Buffer::BUFFER_CPU_WRITE_DISCARD; - desc.Type = Oyster::Buffer::STRUCTURED_BUFFER; - desc.ElementSize = sizeof( ::Oyster::Resources::BufferDefinitions::ScreenTileFrustrum); - desc.NumElements = FrustrumSize; - desc.InitData = NULL; - - //create matching srv - srvDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER; - srvDesc.Format = DXGI_FORMAT_UNKNOWN; - srvDesc.Buffer.FirstElement = 0; - srvDesc.Buffer.NumElements = FrustrumSize; - - PipeLineResourses::Resources[0] = Oyster::Engine::Init::Buffers::CreateBuffer(desc); - - HRESULT hr = Oyster::Core::Device->CreateShaderResourceView( *PipeLineResourses::Resources[0], &srvDesc, &Oyster::Resources::PipeLineResourses::ComputeResources[0] ); -} - -void PipeLineResourses::InitPointLights() -{ - D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; - Oyster::Buffer::BUFFER_INIT_DESC desc; - HRESULT hr; - - //buffer description for pointlight - desc.Usage = Oyster::Buffer::BUFFER_CPU_WRITE_DISCARD; - desc.Type = Oyster::Buffer::STRUCTURED_BUFFER; - desc.ElementSize = sizeof(Oyster::Resources::BufferDefinitions::PointLightDescription); - desc.NumElements = Oyster::Engine::States::GetMaxPointlights(); - desc.InitData = NULL; - - PipeLineResourses::Resources[1] = Oyster::Engine::Init::Buffers::CreateBuffer(desc); - - //create matching srv - srvDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER; - srvDesc.Format = DXGI_FORMAT_UNKNOWN; - srvDesc.Buffer.FirstElement = 0; - srvDesc.Buffer.NumElements = Oyster::Engine::States::GetMaxPointlights(); - - hr = Oyster::Core::Device->CreateShaderResourceView( *PipeLineResourses::Resources[1], &srvDesc, &Oyster::Resources::PipeLineResourses::ComputeResources[1] ); -} - -void PipeLineResourses::InitLightData() -{ - LightData.numDispatches = FrustrumDimensions; -} - -void PipeLineResourses::InitLighting(int sizeX, int sizeY) -{ - D3D11_TEXTURE2D_DESC Tdesc; - Tdesc.Width = sizeX; - Tdesc.Height = sizeY; - Tdesc.MipLevels = Tdesc.ArraySize = 1; - Tdesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; - Tdesc.SampleDesc.Count = 1; - Tdesc.SampleDesc.Quality=0; - Tdesc.Usage = D3D11_USAGE_DEFAULT; - Tdesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_UNORDERED_ACCESS; - Tdesc.CPUAccessFlags = 0; - Tdesc.MiscFlags = 0; - - ID3D11Texture2D *pTexture; - HRESULT hr; - for(int i = 0; i < 4; ++i ) - { - hr = Oyster::Core::Device->CreateTexture2D( &Tdesc, NULL, &pTexture ); - hr = Oyster::Core::Device->CreateShaderResourceView( pTexture, 0, &(LightOut[i]) ); - hr = Oyster::Core::Device->CreateUnorderedAccessView( pTexture, 0, &(LightTarget[i]) ); - pTexture->Release(); - } - - hr = Oyster::Core::Device->CreateTexture2D( &Tdesc, NULL, &pTexture ); - hr = Oyster::Core::Device->CreateShaderResourceView( pTexture, 0, &TempSrv ); - hr = Oyster::Core::Device->CreateUnorderedAccessView( pTexture, 0, &TempUav ); - pTexture->Release(); -} \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/PipelineResources.h b/Code/OysterGraphics/OldResourses/PipelineResources.h deleted file mode 100644 index 47f89c2d..00000000 --- a/Code/OysterGraphics/OldResourses/PipelineResources.h +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once - -#ifndef PipeLineResources_H -#define PipeLineResources_H - -#include "..\EngineIncludes.h" - -namespace Oyster -{ - namespace Resources - { - struct PipeLineResourses - { - //0 = Diffuse - //1 = Specular - //2 = Glow - //3 = Pos - //4 = Normal - static ID3D11ShaderResourceView* GeometryOut[5]; - static ID3D11RenderTargetView* GeometryTarget[5]; - - - //0 = TileBuffer - //1 = PointList - //2 = Random - //3 = Sphere - static ID3D11ShaderResourceView* ComputeResources[4]; - static Oyster::Buffer* Resources[2]; - - - //0 = Diffuse - //1 = Specular - //2 = Glow - //3 = SSAO - static ID3D11ShaderResourceView* LightOut[4]; - static ID3D11UnorderedAccessView* LightTarget[4]; - - //0 = BlurTempStorage - static ID3D11UnorderedAccessView* TempUav; - static ID3D11ShaderResourceView* TempSrv; - - static ID3D11RenderTargetView* RtvNulls[16]; - static ID3D11ShaderResourceView* SrvNulls[16]; - static ID3D11UnorderedAccessView* uavNULL[16]; - - //static Oyster::Collision3D::Frustrum* SubFrustrums; - static int FrustrumSize; - static LinearAlgebra::Vector3 FrustrumDimensions; - - static Oyster::Resources::BufferDefinitions::LightStructureBuffer LightData; - - static void Init(int sizeX, int sizeY); - - static void InitGeometry(int sizeX, int sizeY); - - static void InitSSAOData(); - static void InitSubFrustrums(int sizeX, int sizeY); - static void InitPointLights(); - static void InitLightData(); - - static void InitLighting(int sizeX, int sizeY); - }; - } -} - -#endif \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/ShaderEffects.cpp b/Code/OysterGraphics/OldResourses/ShaderEffects.cpp deleted file mode 100644 index 33de3c05..00000000 --- a/Code/OysterGraphics/OldResourses/ShaderEffects.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include "ShaderEffects.h" - -namespace Oyster -{ - namespace Resources - { - Core::ShaderManager::ShaderEffect ShaderEffects::BasicSprite = Core::ShaderManager::ShaderEffect(); - Core::ShaderManager::ShaderEffect ShaderEffects::Text2DEffect = Core::ShaderManager::ShaderEffect(); - Core::ShaderManager::ShaderEffect ShaderEffects::ModelEffect = Core::ShaderManager::ShaderEffect(); - - void ShaderEffects::Init() - { - BasicSprite.IAStage.Topology = D3D11_PRIMITIVE_TOPOLOGY_POINTLIST; - BasicSprite.Shaders.Vertex = Oyster::Core::ShaderManager::Get::Vertex(L"2D"); - BasicSprite.Shaders.Geometry = Oyster::Core::ShaderManager::Get::Geometry(L"2D"); - BasicSprite.Shaders.Pixel = Oyster::Core::ShaderManager::Get::Pixel(L"Texture0"); - - D3D11_BLEND_DESC blendDesc; - blendDesc.AlphaToCoverageEnable=false; - blendDesc.IndependentBlendEnable=false; - blendDesc.RenderTarget[0].BlendEnable=true; - - blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; - blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; - blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; - - blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; - blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ONE; - blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_MAX; - - blendDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; - - ID3D11BlendState* blender; - - Oyster::Core::Device->CreateBlendState(&blendDesc,&blender); - - BasicSprite.RenderStates.BlendState = blender; - - ID3D11InputLayout* layout; - - Oyster::Core::ShaderManager::CreateInputLayout(SpriteVertexDesc,1,Oyster::Core::ShaderManager::Get::Vertex(L"2D"),layout); - - BasicSprite.IAStage.Layout = layout; - - Text2DEffect.IAStage.Topology=D3D11_PRIMITIVE_TOPOLOGY_POINTLIST; - Text2DEffect.Shaders.Vertex = Oyster::Core::ShaderManager::Get::Vertex(L"Text"); - Text2DEffect.Shaders.Geometry = Oyster::Core::ShaderManager::Get::Geometry(L"Text"); - Text2DEffect.Shaders.Pixel = Oyster::Core::ShaderManager::Get::Pixel(L"Texture0"); - - Oyster::Core::ShaderManager::CreateInputLayout(Text2DDesc,3,Oyster::Core::ShaderManager::Get::Vertex(L"Text"),layout); - - Text2DEffect.IAStage.Layout = layout; - - blendDesc.AlphaToCoverageEnable = true; - Oyster::Core::Device->CreateBlendState(&blendDesc,&blender); - Text2DEffect.RenderStates.BlendState = blender; - - ModelEffect.IAStage.Topology = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; - Oyster::Core::ShaderManager::CreateInputLayout(ModelDesc,3,Oyster::Core::ShaderManager::Get::Vertex(L"OBJ"),layout); - ModelEffect.IAStage.Layout = layout; - - ModelEffect.Shaders.Vertex = Oyster::Core::ShaderManager::Get::Vertex(L"OBJ"); - ModelEffect.Shaders.Pixel = Oyster::Core::ShaderManager::Get::Pixel(L"OBJDEF"); - - Oyster::Buffer::BUFFER_INIT_DESC desc; - - desc.ElementSize=sizeof(Oyster::Math::Float4x4); - desc.NumElements = 1; - desc.Usage = Oyster::Buffer::BUFFER_CPU_WRITE_DISCARD; - desc.Type = Oyster::Buffer::CONSTANT_BUFFER_VS; - desc.InitData = NULL; - - ModelEffect.CBuffers.Vertex.push_back(Oyster::Engine::Init::Buffers::CreateBuffer(desc)); - ModelEffect.CBuffers.Vertex.push_back(Oyster::Engine::Init::Buffers::CreateBuffer(desc)); - - //use Oyster::Resources::Buffers::CbufferVS for per object data - //perObject = Oyster::Engine::Init::Buffers::CreateBuffer(desc); - - } - - D3D11_INPUT_ELEMENT_DESC ShaderEffects::SpriteVertexDesc[1] = - { - {"POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, - }; - - D3D11_INPUT_ELEMENT_DESC ShaderEffects::Text2DDesc[3] = - { - {"Position",0, DXGI_FORMAT_R32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, - {"Offset",0, DXGI_FORMAT_R32_SINT, 0, 4, D3D11_INPUT_PER_VERTEX_DATA, 0}, - {"CharOffset",0, DXGI_FORMAT_R32_FLOAT, 0, 8, D3D11_INPUT_PER_VERTEX_DATA, 0}, - }; - - D3D11_INPUT_ELEMENT_DESC ShaderEffects::ModelDesc[3] = - { - {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, - {"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0}, - {"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0}, - }; - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/OldResourses/ShaderEffects.h b/Code/OysterGraphics/OldResourses/ShaderEffects.h deleted file mode 100644 index 766d63a9..00000000 --- a/Code/OysterGraphics/OldResourses/ShaderEffects.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include "../Engine.h" -#include "Buffers.h" - -namespace Oyster -{ - namespace Resources - { - struct ShaderEffects - { - static Oyster::Core::ShaderManager::ShaderEffect BasicSprite; - static Oyster::Core::ShaderManager::ShaderEffect Text2DEffect; - static Oyster::Core::ShaderManager::ShaderEffect ModelEffect; - - static void Init(); - - static D3D11_INPUT_ELEMENT_DESC SpriteVertexDesc[1]; - static D3D11_INPUT_ELEMENT_DESC Text2DDesc[3]; - static D3D11_INPUT_ELEMENT_DESC ModelDesc[3]; - }; - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/OysterGraphics.vcxproj b/Code/OysterGraphics/OysterGraphics.vcxproj index e9b8ff72..c19e073f 100644 --- a/Code/OysterGraphics/OysterGraphics.vcxproj +++ b/Code/OysterGraphics/OysterGraphics.vcxproj @@ -78,6 +78,7 @@ $(ProjectName)_$(PlatformShortName) C:\Program Files (x86)\Visual Leak Detector\include;$(IncludePath) C:\Program Files (x86)\Visual Leak Detector\lib\Win32;$(LibraryPath) + true $(SolutionDir)..\Bin\DLL\ @@ -181,8 +182,9 @@ - - + + + @@ -193,9 +195,10 @@ - + + - + @@ -206,19 +209,41 @@ - + + Geometry + 5.0 + Geometry + 4.0 + Geometry + 4.0 + Geometry + 4.0 + + + Pixel + Pixel + Pixel + Pixel + + + Vertex + Vertex + Vertex + Vertex + + Compute Compute Compute Compute - + Pixel Pixel Pixel Pixel - + Compute 5.0 Compute @@ -228,7 +253,27 @@ Compute 5.0 - + + Compute + 5.0 + Compute + 5.0 + Compute + 5.0 + Compute + 5.0 + + + Compute + 5.0 + Compute + 5.0 + Compute + 5.0 + Compute + 5.0 + + Vertex Vertex Vertex @@ -273,12 +318,14 @@ - - - - - + + + + + + + diff --git a/Code/OysterGraphics/OysterGraphics.vcxproj.filters b/Code/OysterGraphics/OysterGraphics.vcxproj.filters index 11d05dde..4fcaee03 100644 --- a/Code/OysterGraphics/OysterGraphics.vcxproj.filters +++ b/Code/OysterGraphics/OysterGraphics.vcxproj.filters @@ -24,9 +24,6 @@ Source Files - - Source Files - Source Files @@ -42,15 +39,21 @@ Source Files - - Source Files - - - Source Files - Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + @@ -59,9 +62,6 @@ Header Files - - Header Files - Header Files @@ -83,10 +83,13 @@ Header Files - + Header Files - + + Header Files + + Header Files @@ -95,15 +98,24 @@ - - - + + + + + + + + + - - - - + + + + + + + \ No newline at end of file diff --git a/Code/OysterGraphics/Render/DefaultRenderer.cpp b/Code/OysterGraphics/Render/DefaultRenderer.cpp new file mode 100644 index 00000000..89fb1716 --- /dev/null +++ b/Code/OysterGraphics/Render/DefaultRenderer.cpp @@ -0,0 +1,198 @@ +#include "DefaultRenderer.h" +#include "Resources.h" +#include "../Definitions/GraphicalDefinition.h" +#include "../Model/ModelInfo.h" +#include "../DllInterfaces/GFXAPI.h" +#include +#include + +namespace Oyster +{ + namespace Graphics + { + namespace Render + { + Definitions::Pointlight pl; + Model::Model* DefaultRenderer::cube = NULL; + Model::Model* DefaultRenderer::cube2 = NULL; + + void DefaultRenderer::NewFrame(Oyster::Math::Float4x4 View, Oyster::Math::Float4x4 Projection, Definitions::Pointlight Lights, int numLights) + { + Preparations::Basic::ClearBackBuffer(Oyster::Math::Float4(1,0,0,1)); + Preparations::Basic::ClearRTV(Resources::GBufferRTV,Resources::GBufferSize,Math::Float4(0,0,0,0)); + Core::PipelineManager::SetRenderPass(Graphics::Render::Resources::Gather::Pass); + + void* data; + + Definitions::LightConstants lc; + lc.InvProj = Projection.GetInverse(); + lc.Pixels = Core::resolution; + lc.Lights = numLights; + lc.View = View; + lc.Proj = Projection; + lc.SSAORadius = 3; + + data = Resources::Light::LightConstantsData.Map(); + memcpy(data, &lc, sizeof(Definitions::LightConstants)); + Resources::Light::LightConstantsData.Unmap(); + + data = Resources::Light::PointLightsData.Map(); + memcpy(data, &Lights, sizeof(Definitions::Pointlight) * numLights); + Resources::Light::PointLightsData.Unmap(); + + Definitions::PostData pd; + pd.x = (int)lc.Pixels.x; + pd.y = (int)lc.Pixels.y; + + data = Resources::Post::Data.Map(); + memcpy(data, &pd, sizeof(Definitions::PostData)); + Resources::Post::Data.Unmap(); + } + + void DefaultRenderer::RenderScene(Model::Model* models, int count, Math::Matrix View, Math::Matrix Projection, float deltaTime) + { + for(int i = 0; i < count; ++i) + { + if(&models[i] == NULL) + continue; + if(models[i].Visible) + { + Definitions::PerModel pm; + pm.WV = View * models[i].WorldMatrix; + pm.WVP = Projection * pm.WV; + + Model::ModelInfo* info = models[i].info; + + Definitions::AnimationData am; //final + if(info->Animated && models[i].Animation.AnimationPlaying != NULL) + { + models[i].Animation.AnimationTime += deltaTime; + cube->WorldMatrix = Math::Matrix::identity; + ////store inverse absolut transform + Math::Matrix SkinTransform[100]; + Math::Matrix BoneAnimated[100]; + Math::Matrix BoneAbsAnimated[100]; + + Math::Matrix Scale = Math::Matrix::identity; + Scale.m[0][0] = 1; + Scale.m[1][1] = 1; + Scale.m[2][2] = 2; + + + + for(int b = 0; b BoneCount; ++b) + { + Model::Bone Bone = info->bones[b]; + SkinTransform[b] = Bone.Absolute.GetInverse(); + BoneAnimated[b] = Bone.Relative; + BoneAbsAnimated[b] = Bone.Absolute; + + + cube2->WorldMatrix = Scale; + cube2->WorldMatrix.v[3] = info->bones[b].Absolute.v[3]; + } + int b = 0; + Model::Animation A = *models[i].Animation.AnimationPlaying; + while(models[i].Animation.AnimationTime>A.duration) + models[i].Animation.AnimationTime -= (float)A.duration; + + float position = models[i].Animation.AnimationTime; + for(int b = 0; b < A.Bones;++b) + { + //find current frame + int nrOfFrames = A.Frames[b]; + Model::Frame PFrame = A.Keyframes[b][nrOfFrames-1]; + Model::Frame NFrame = A.Keyframes[b][nrOfFrames-1]; + bool FrameFound = false; + for (int i = 0; i < nrOfFrames; i++) + { + if(position < A.Keyframes[b][i].time) + { + PFrame = A.Keyframes[b][i-1]; + NFrame = A.Keyframes[b][i]; + break; + } + } + float denominator = (float)(NFrame.time - PFrame.time); + if(denominator == 0) + { + BoneAnimated[PFrame.bone.Parent] = PFrame.bone.Relative; + continue; + } + float inter = (float)((position - PFrame.time) / denominator); + Math3D::InterpolateOrientation_UsingNonRigidNlerp(PFrame.bone.Relative,NFrame.bone.Relative,inter, BoneAnimated[PFrame.bone.Parent]); + } + + ////calculate Absolute Animation Transform + for(int b = 0; b < info->BoneCount; ++b) + { + BoneAbsAnimated[b] = BoneAbsAnimated[info->bones[b].Parent] * BoneAnimated[b]; + //SkinTransform[b] = BoneAbsAnimated[b]; + cube->WorldMatrix = Scale; + cube->WorldMatrix.v[3] = BoneAbsAnimated[b].v[3]; + cube->WorldMatrix = models[i].WorldMatrix * cube->WorldMatrix; + DefaultRenderer::RenderScene(cube,1,View,Projection); + } + + //write data to am + for(int b = 0; b < info->BoneCount; ++b) + { + am.AnimatedData[b] = (BoneAbsAnimated[b] * SkinTransform[b]); + } + + + void *data = Resources::Gather::AnimationData.Map(); + memcpy(data,&am,sizeof(Definitions::AnimationData)); + Resources::Gather::AnimationData.Unmap(); + + pm.Animated = 1; + } + else + pm.Animated = 0; + + void* data = Resources::Gather::ModelData.Map(); + memcpy(data,&(pm),sizeof(pm)); + Resources::Gather::ModelData.Unmap(); + + if(info->Material.size()) + { + Core::deviceContext->PSSetShaderResources(0,(UINT)info->Material.size(),&(info->Material[0])); + } + + + info->Vertices->Apply(); + if(info->Indexed) + { + info->Indecies->Apply(); + Oyster::Graphics::Core::deviceContext->DrawIndexed(info->IndexCount,0,0); + } + else + { + Oyster::Graphics::Core::deviceContext->Draw(info->VertexCount,0); + } + } + } + } + + + void DefaultRenderer::EndFrame() + { + Core::PipelineManager::SetRenderPass(Resources::Light::Pass); + + Core::deviceContext->Dispatch((UINT)((Core::resolution.x + 15U) / 16U), (UINT)((Core::resolution.y + 15U) / 16U), 1); + + Core::PipelineManager::SetRenderPass(Resources::Blur::HorPass); + Core::deviceContext->Dispatch((UINT)((Core::resolution.x + 15U) / 16U), (UINT)((Core::resolution.y + 15U) / 16U), 1); + + Core::PipelineManager::SetRenderPass(Resources::Blur::VertPass); + Core::deviceContext->Dispatch((UINT)((Core::resolution.x + 15U) / 16U), (UINT)((Core::resolution.y + 15U) / 16U), 1); + + Core::PipelineManager::SetRenderPass(Resources::Post::Pass); + + Core::deviceContext->Dispatch((UINT)((Core::resolution.x + 15U) / 16U), (UINT)((Core::resolution.y + 15U) / 16U), 1); + + Core::swapChain->Present(0,0); + } + } + } +} \ No newline at end of file diff --git a/Code/OysterGraphics/Render/DefaultRenderer.h b/Code/OysterGraphics/Render/DefaultRenderer.h new file mode 100644 index 00000000..627998fa --- /dev/null +++ b/Code/OysterGraphics/Render/DefaultRenderer.h @@ -0,0 +1,25 @@ +#pragma once +#include "..\Definitions\GraphicalDefinition.h" +#include "..\Core\Core.h" +#include "Preparations\Preparations.h" +#include "..\Model\Model.h" + +namespace Oyster +{ + namespace Graphics + { + namespace Render + { + class DefaultRenderer + { + public: + static void NewFrame(Oyster::Math::Float4x4 View, Oyster::Math::Float4x4 Projection, Definitions::Pointlight Lights, int numLights); + static void RenderScene(Model::Model* models, int count, Math::Matrix View, Math::Matrix Projection, float DeltaTime = 0); + static void EndFrame(); + + static Model::Model* cube; + static Model::Model* cube2; + }; + } + } +} \ No newline at end of file diff --git a/Code/OysterGraphics/Render/GuiRenderer.cpp b/Code/OysterGraphics/Render/GuiRenderer.cpp new file mode 100644 index 00000000..62b724cd --- /dev/null +++ b/Code/OysterGraphics/Render/GuiRenderer.cpp @@ -0,0 +1,44 @@ +#include "GuiRenderer.h" +#include "Resources.h" +#include "../Definitions/GraphicalDefinition.h" + +namespace Oyster +{ + namespace Graphics + { + namespace Render + { + namespace Rendering + { + void Gui::BeginRender() + { + Core::PipelineManager::SetRenderPass(Render::Resources::Gui::Pass); + } + + void Gui::Render(ID3D11ShaderResourceView* tex,Math::Float2 pos, Math::Float2 size) + { + Core::deviceContext->PSSetShaderResources(0,1,&tex); + + pos *= 2; + pos -= 1; + pos.y *= -1; + + Definitions::GuiData gd; + + gd.Translation = Math::Matrix::identity; + gd.Translation.m41 = pos.x; + gd.Translation.m42 = pos.y; + gd.Translation.m11 = size.x; + gd.Translation.m22 = size.y; + + + void* data = Render::Resources::Gui::Data.Map(); + memcpy(data,&gd,sizeof(Definitions::GuiData)); + Render::Resources::Gui::Data.Unmap(); + + Core::deviceContext->Draw(1,0); + } + } + } + } +} \ No newline at end of file diff --git a/Code/OysterGraphics/Render/GuiRenderer.h b/Code/OysterGraphics/Render/GuiRenderer.h new file mode 100644 index 00000000..c722ae24 --- /dev/null +++ b/Code/OysterGraphics/Render/GuiRenderer.h @@ -0,0 +1,22 @@ +#pragma once + +#include "../Core/Core.h" + +namespace Oyster +{ + namespace Graphics + { + namespace Render + { + namespace Rendering + { + class Gui + { + public: + static void BeginRender(); + static void Render(ID3D11ShaderResourceView* tex, Math::Float2 pos, Math::Float2 size); + }; + } + } + } +} \ No newline at end of file diff --git a/Code/OysterGraphics/Render/Rendering/BasicRender.cpp b/Code/OysterGraphics/Render/Rendering/BasicRender.cpp deleted file mode 100644 index 113d7b6f..00000000 --- a/Code/OysterGraphics/Render/Rendering/BasicRender.cpp +++ /dev/null @@ -1,167 +0,0 @@ -#include "Render.h" -#include "../Resources/Deffered.h" -#include "../../Definitions/GraphicalDefinition.h" -#include "../../Model/ModelInfo.h" -#include -#include - -namespace Oyster -{ - namespace Graphics - { - namespace Render - { - namespace Rendering - { - Definitions::Pointlight pl; - - void Basic::NewFrame(Oyster::Math::Float4x4 View, Oyster::Math::Float4x4 Projection, Definitions::Pointlight* Lights, int numLights) - { - Preparations::Basic::ClearBackBuffer(Oyster::Math::Float4(1,0,0,1)); - Preparations::Basic::ClearRTV(Resources::Deffered::GBufferRTV,Resources::Deffered::GBufferSize,Math::Float4(0,0,0,1)); - Core::PipelineManager::SetRenderPass(Graphics::Render::Resources::Deffered::GeometryPass); - - void* data; - - Definitions::LightConstants lc; - lc.InvProj = Projection.GetInverse(); - lc.Pixels = Core::resolution; - lc.Lights = numLights; - lc.View = View; - lc.Proj = Projection; - lc.SSAORadius = 3; - - data = Resources::Deffered::LightConstantsData.Map(); - memcpy(data, &lc, sizeof(Definitions::LightConstants)); - Resources::Deffered::LightConstantsData.Unmap(); - - data = Resources::Deffered::PointLightsData.Map(); - memcpy(data, Lights, sizeof(Definitions::Pointlight) * numLights); - Resources::Deffered::PointLightsData.Unmap(); - } - - void Basic::RenderScene(Model::Model* models, int count, Math::Matrix View, Math::Matrix Projection) - { - for(int i = 0; i < count; ++i) - { - if(&models[i] == NULL) - continue; - if(models[i].Visible) - { - Definitions::PerModel pm; - pm.WV = View * models[i].WorldMatrix; - pm.WVP = Projection * pm.WV; - - void* data = Resources::Deffered::ModelData.Map(); - memcpy(data,&(pm),sizeof(pm)); - Resources::Deffered::ModelData.Unmap(); - - Model::ModelInfo* info = (Model::ModelInfo*)models[i].info; - - - - Definitions::AnimationData am; - if(info->Animated && models[i].AnimationPlaying != -1) - { - - Definitions::AnimationData am2; - //write default data - for (int b = 0; b < info->BoneCount; b++) - { - am2.animatedData[b] = info->bones[b].Transform; - } - //loop bones in animation - am.Animated = 1; - - - Model::Frame Prev, Next; - - models[i].AnimationTime = fmod(models[i].AnimationTime,info->Animations[models[i].AnimationPlaying].duration); - - for(int x = 0; x < info->Animations[models[i].AnimationPlaying].Bones; ++x) - { - //loop frame per bone - Prev.bone.Parent = 0; - Next = Prev; - for(int y = 0; y < info->Animations[models[i].AnimationPlaying].Frames[x]; ++y) - { - ///TODO replace with binary search? - Model::Frame f = info->Animations[models[i].AnimationPlaying].Keyframes[x][y]; - - //if we hit frame - if(models[i].AnimationTime == f.time) - { - Prev = f; - Next = f; - break; - } - - //if time is larger than frame time, store frames - if(models[i].AnimationTime < f.time) - { - Next = f; - Prev = info->Animations[models[i].AnimationPlaying].Keyframes[x][y-1]; - break; - } - } - - - //calculate interpolated bone position - - //rebase model time to between prev and next - float interpoation =(models[i].AnimationTime - Prev.time) / (Next.time - Prev.time); - - //interpolate - Math::Matrix Interpolated; - Math3D::InterpolateOrientation_UsingNonRigidNlerp(Prev.bone.Transform,Next.bone.Transform,interpoation, Interpolated); - - //write magic to animated data - am2.animatedData[Prev.bone.Parent] = Interpolated * am2.animatedData[info->bones[Prev.bone.Parent].Parent]; - //sneaky write do correct data buffer - am.animatedData[x] = (am2.animatedData[Prev.bone.Parent] * info->bones[Prev.bone.Parent].Transform.GetInverse()); - } - } - else - am.Animated = 0; - - data = Resources::Deffered::AnimationData.Map(); - memcpy(data,&am,sizeof(Definitions::AnimationData)); - Resources::Deffered::AnimationData.Unmap(); - - if(info->Material.size()) - { - Core::deviceContext->PSSetShaderResources(0,(UINT)info->Material.size(),&(info->Material[0])); - } - - - info->Vertices->Apply(); - if(info->Indexed) - { - info->Indecies->Apply(); - Oyster::Graphics::Core::deviceContext->DrawIndexed(info->IndexCount,0,0); - } - else - { - Oyster::Graphics::Core::deviceContext->Draw(info->VertexCount,0); - } - } - } - } - - - void Basic::EndFrame() - { - Core::PipelineManager::SetRenderPass(Resources::Deffered::LightPass); - - Core::deviceContext->Dispatch((UINT)((Core::resolution.x + 15U) / 16U), (UINT)((Core::resolution.y + 15U) / 16U), 1); - - Core::PipelineManager::SetRenderPass(Resources::Deffered::PostPass); - - Core::deviceContext->Dispatch((UINT)((Core::resolution.x + 15U) / 16U), (UINT)((Core::resolution.y + 15U) / 16U), 1); - - Core::swapChain->Present(0,0); - } - } - } - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/Render/Rendering/Render.h b/Code/OysterGraphics/Render/Rendering/Render.h deleted file mode 100644 index 48d153d4..00000000 --- a/Code/OysterGraphics/Render/Rendering/Render.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once -#include "..\..\Definitions\GraphicalDefinition.h" -#include "..\..\Core\Core.h" -#include "..\Preparations\Preparations.h" -#include "..\..\Model\Model.h" - -namespace Oyster -{ - namespace Graphics - { - namespace Render - { - namespace Rendering - { - class Basic - { - public: - - static void NewFrame(Oyster::Math::Float4x4 View, Oyster::Math::Float4x4 Projection, Definitions::Pointlight* Lights, int numLights); - static void RenderScene(Model::Model* models, int count, Math::Matrix View, Math::Matrix Projection); - static void EndFrame(); - }; - } - } - } -} \ No newline at end of file diff --git a/Code/OysterGraphics/Render/Resources.cpp b/Code/OysterGraphics/Render/Resources.cpp new file mode 100644 index 00000000..f7b1144d --- /dev/null +++ b/Code/OysterGraphics/Render/Resources.cpp @@ -0,0 +1,431 @@ +#pragma once + +#include "Resources.h" +#include "..\Definitions\GraphicalDefinition.h" + +typedef Oyster::Graphics::Core::PipelineManager::ShaderType ShaderType; +typedef Oyster::Graphics::Core::PipelineManager::Get GetShader; +typedef Oyster::Graphics::Core::PipelineManager Shader; +typedef Oyster::Graphics::Core::Buffer Buffer; + +const std::wstring PathToHLSL = L"..\\..\\Code\\OysterGraphics\\Shader\\Passes\\"; +const std::wstring PathToCSO = L"..\\Content\\Shaders\\"; + +const int KernelSize = 10; +const int SampleSpread = 16; + +namespace Oyster +{ + namespace Graphics + { + namespace Render + { + + ID3D11RenderTargetView* Resources::GBufferRTV[Resources::GBufferSize] = {0}; + ID3D11ShaderResourceView* Resources::GBufferSRV[Resources::GBufferSize] = {0}; + + ID3D11UnorderedAccessView* Resources::LBufferUAV[Resources::LBufferSize] = {0}; + ID3D11ShaderResourceView* Resources::LBufferSRV[Resources::LBufferSize] = {0}; + + ID3D11UnorderedAccessView* Resources::Blur::BufferUAV = {0}; + ID3D11ShaderResourceView* Resources::Blur::BufferSRV = {0}; + + Shader::RenderPass Resources::Gather::Pass; + Shader::RenderPass Resources::Light::Pass; + Shader::RenderPass Resources::Post::Pass; + Shader::RenderPass Resources::Gui::Pass; + Shader::RenderPass Resources::Blur::VertPass; //Set this pass second when doing a "fullscreen" blur + Shader::RenderPass Resources::Blur::HorPass; //Set this pass first when doing a "fullscreen" blur + + Buffer Resources::Gather::ModelData = Buffer(); + Buffer Resources::Gather::AnimationData = Buffer(); + Buffer Resources::Light::LightConstantsData = Buffer(); + Buffer Resources::Gui::Data = Buffer(); + Buffer Resources::Post::Data = Buffer(); + + Buffer Resources::Light::PointLightsData = Buffer(); + ID3D11ShaderResourceView* Resources::Light::PointLightView = NULL; + + ID3D11ShaderResourceView* Resources::Light::SSAOKernel = NULL; + ID3D11ShaderResourceView* Resources::Light::SSAORandom = NULL; + + ID3D11RasterizerState* Resources::RenderStates::rs = NULL; + ID3D11SamplerState** Resources::RenderStates::ss = new ID3D11SamplerState*[1]; + ID3D11DepthStencilState* Resources::RenderStates::dsState = NULL; + + + Core::Init::State Resources::InitShaders() + { +#ifdef _DEBUG + std::wstring path = PathToHLSL+L"Gather\\"; + std::wstring end = L".hlsl"; +#else + std::wstring path = PathToCSO; + std::wstring end = L".cso"; +#endif + //Load Shaders + Core::PipelineManager::Init(path + L"GatherPixel" + end, ShaderType::Pixel, L"Gather"); + Core::PipelineManager::Init(path + L"GatherVertex" + end, ShaderType::Vertex, L"Gather"); +#ifdef _DEBUG + path = PathToHLSL+L"Light\\"; +#endif + Core::PipelineManager::Init(path + L"LightPass" + end, ShaderType::Compute, L"LightPass"); +#ifdef _DEBUG + path = PathToHLSL+L"Post\\"; +#endif + Core::PipelineManager::Init(path + L"PostPass" + end, ShaderType::Compute, L"PostPass"); +#ifdef _DEBUG + path = PathToHLSL+L"Blur\\"; +#endif + Core::PipelineManager::Init(path + L"BlurHor" + end, ShaderType::Compute, L"BlurHor"); + Core::PipelineManager::Init(path + L"BlurVert" + end, ShaderType::Compute, L"BlurVert"); +#ifdef _DEBUG + path = PathToHLSL+L"2D\\"; +#endif + Core::PipelineManager::Init(path + L"2DVertex" + end,ShaderType::Vertex, L"2D"); + Core::PipelineManager::Init(path + L"2DGeometry" + end,ShaderType::Geometry, L"2D"); + Core::PipelineManager::Init(path + L"2DPixel" + end,ShaderType::Pixel, L"2D"); + + return Core::Init::State::Success; + } + + Core::Init::State Resources::InitBuffers() + { + //Create Buffers + Buffer::BUFFER_INIT_DESC desc; + desc.ElementSize = sizeof(Definitions::PerModel); + desc.NumElements = 1; + desc.InitData = NULL; + desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_VS; + desc.Usage = Buffer::BUFFER_USAGE::BUFFER_CPU_WRITE_DISCARD; + + Gather::ModelData.Init(desc); + + desc.NumElements = 1; + desc.ElementSize = sizeof(Definitions::AnimationData); + Gather::AnimationData.Init(desc); + + desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_GS; + desc.NumElements = 1; + desc.ElementSize = sizeof(Definitions::GuiData); + Gui::Data.Init(desc); + + desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_CS; + desc.ElementSize = sizeof(Definitions::PostData); + Post::Data.Init(desc); + + desc.ElementSize = sizeof(Definitions::LightConstants); + Light::LightConstantsData.Init(desc); + + desc.ElementSize = sizeof(Definitions::Pointlight); + desc.NumElements = MaxLightSize; + desc.Type = Buffer::STRUCTURED_BUFFER; + Light::PointLightsData.Init(desc); + return Core::Init::Success; + } + + Core::Init::State Resources::InitRenderStates() + { + ////Create States + D3D11_RASTERIZER_DESC rdesc; + rdesc.CullMode = D3D11_CULL_BACK; + rdesc.FillMode = D3D11_FILL_SOLID; + rdesc.FrontCounterClockwise = false; + rdesc.DepthBias = 0; + rdesc.DepthBiasClamp = 0; + rdesc.DepthClipEnable = true; + rdesc.SlopeScaledDepthBias = 0; + rdesc.ScissorEnable = false; + rdesc.MultisampleEnable = false; + rdesc.AntialiasedLineEnable = false; + + + Oyster::Graphics::Core::device->CreateRasterizerState(&rdesc,&RenderStates::rs); + + D3D11_SAMPLER_DESC sdesc; + sdesc.Filter = D3D11_FILTER_ANISOTROPIC; + sdesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; + sdesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; + sdesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; + sdesc.MipLODBias = 0; + sdesc.MaxAnisotropy =4; + sdesc.ComparisonFunc = D3D11_COMPARISON_LESS_EQUAL; + *sdesc.BorderColor = *Oyster::Math::Float4(1,1,1,1).element; + sdesc.MinLOD = 0; + sdesc.MaxLOD = D3D11_FLOAT32_MAX; + + + Oyster::Graphics::Core::device->CreateSamplerState(&sdesc,RenderStates::ss); + + D3D11_DEPTH_STENCIL_DESC ddesc; + ddesc.DepthEnable = true; + ddesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; + ddesc.DepthFunc = D3D11_COMPARISON_LESS; + + ddesc.StencilEnable = true; + ddesc.StencilReadMask = 0xFF; + ddesc.StencilWriteMask = 0xFF; + + ddesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; + ddesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR; + ddesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; + ddesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS; + + ddesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; + ddesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR; + ddesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; + ddesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS; + + + Core::device->CreateDepthStencilState(&ddesc,&RenderStates::dsState); + return Core::Init::Success; + } + + Core::Init::State Resources::InitViews() + { + //Create Views + for(int i = 0; i< GBufferSize; ++i) + { + Core::Init::CreateLinkedShaderResourceFromTexture(&GBufferRTV[i],&GBufferSRV[i],NULL); + } + + for(int i = 0; i < LBufferSize; ++i) + { + Core::Init::CreateLinkedShaderResourceFromTexture(NULL,&LBufferSRV[i],&LBufferUAV[i]); + } + + Buffer* b = &Light::PointLightsData; + + Core::Init::CreateLinkedShaderResourceFromStructuredBuffer(&b,&Light::PointLightView,NULL); + srand((unsigned int)time(0)); + + //SSAO + Math::Vector3 kernel[KernelSize]; + Math::Vector3 random[SampleSpread]; + for(int i = 0;i < KernelSize; ++i) + { + kernel[i] = Oyster::Math::Vector3::null; + while( kernel[i] == Oyster::Math::Vector3::null ) + { + kernel[i] = Oyster::Math::Vector3( + (float)rand() / (RAND_MAX + 1) * (1 - -1) + -1, + (float)rand() / (RAND_MAX + 1) * (1 - -1) + -1, + (float)rand() / (RAND_MAX + 1) * (1 - 0) + 0); + } + kernel[i].Normalize(); + + float scale = float(i) / float(KernelSize); + + scale = (0.1f*(1 - scale * scale) + 1.0f *( scale * scale)); + kernel[i] *= scale; + + + } + + for( int i = 0; i < SampleSpread; ++i) + { + random[i] = Oyster::Math::Vector3::null; + while( random[i] == Oyster::Math::Vector3::null ) + { + random[i] = Oyster::Math::Vector3( + (float)rand() / (RAND_MAX + 1) * (1 - -1)+ -1, + /*(float)rand() / (RAND_MAX + 1) * (1 - -1)+ -1,*/ + 1.0f, + 0.0f); + } + random[i].Normalize(); + } + + D3D11_TEXTURE1D_DESC T1desc; + T1desc.Width = KernelSize; + T1desc.MipLevels = T1desc.ArraySize = 1; + T1desc.Format = DXGI_FORMAT_R32G32B32_FLOAT; + T1desc.Usage = D3D11_USAGE_DEFAULT; + T1desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + T1desc.CPUAccessFlags = 0; + T1desc.MiscFlags = 0; + + D3D11_SUBRESOURCE_DATA sphere; + sphere.pSysMem = kernel; + + D3D11_SUBRESOURCE_DATA rnd; + rnd.pSysMem = random; + rnd.SysMemPitch = (UINT)(sqrt(SampleSpread) * sizeof(Oyster::Math::Vector3)); + + ID3D11Texture1D *pTexture1; + + Core::device->CreateTexture1D( &T1desc, &sphere, &pTexture1 ); + Core::device->CreateShaderResourceView( pTexture1, 0, &Light::SSAOKernel ); + pTexture1->Release(); + + D3D11_TEXTURE2D_DESC T2desc; + T2desc.Width = KernelSize; + T2desc.MipLevels = T2desc.ArraySize = 1; + T2desc.Format = DXGI_FORMAT_R32G32B32_FLOAT; + T2desc.Usage = D3D11_USAGE_DEFAULT; + T2desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + T2desc.CPUAccessFlags = 0; + T2desc.MiscFlags = 0; + T2desc.Height = (UINT)sqrt(SampleSpread); + T2desc.Width = (UINT)(SampleSpread/sqrt(SampleSpread)); + T2desc.SampleDesc.Quality = 0; + T2desc.SampleDesc.Count = 1; + + ID3D11Texture2D *pTexture2; + + Core::device->CreateTexture2D( &T2desc, &rnd, &pTexture2 ); + Core::device->CreateShaderResourceView( (pTexture2), 0, &Light::SSAORandom ); + pTexture2->Release(); + return Core::Init::Success; + } + + Core::Init::State Resources::InitPasses() + { + + ////---------------- Geometry Pass Setup ---------------------------- + Gather::Pass.Shaders.Pixel = GetShader::Pixel(L"Gather"); + Gather::Pass.Shaders.Vertex = GetShader::Vertex(L"Gather"); + + D3D11_INPUT_ELEMENT_DESC indesc[] = + { + { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 32, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "BITANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 44, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "BONEINDEX", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 56, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "BONEWEIGHT", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 72, D3D11_INPUT_PER_VERTEX_DATA, 0 } + }; + + Shader::CreateInputLayout(indesc,7,GetShader::Vertex(L"Gather"),Gather::Pass.IAStage.Layout); + Gather::Pass.IAStage.Topology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + Gather::Pass.CBuffers.Vertex.push_back(Gather::AnimationData); + Gather::Pass.CBuffers.Vertex.push_back(Gather::ModelData); + Gather::Pass.RenderStates.Rasterizer = RenderStates::rs; + Gather::Pass.RenderStates.SampleCount = 1; + Gather::Pass.RenderStates.SampleState = RenderStates::ss; + Gather::Pass.RenderStates.DepthStencil = RenderStates::dsState; + for(int i = 0; i -// /Code/OysterGraphics/Shader/HLSL -const std::wstring PathFromExeToCso = L"..\\Content\\Shaders\\"; -const std::wstring PathFromExeToHlsl = L"..\\..\\Code\\OysterGraphics\\Shader\\HLSL\\"; -const std::wstring VertexTransformDebug = L"TransformDebugVertex"; -const std::wstring VertexDebug = L"DebugVertex"; -const std::wstring PixelRed = L"DebugPixel"; -const std::wstring PixelTexture = L"Texture"; -const std::wstring ComputeDebug = L"Debug"; - -typedef Oyster::Graphics::Core::PipelineManager::ShaderType ShaderType; -typedef Oyster::Graphics::Core::PipelineManager::Get GetShader; -typedef Oyster::Graphics::Core::PipelineManager Shader; -typedef Oyster::Graphics::Core::Buffer Buffer; - -namespace Oyster -{ - namespace Graphics - { - namespace Render - { - //Shader::RenderPass Resources::Debug::obj; - Shader::RenderPass Resources::Debug::debugCompute;// = Shader::ShaderEffect();; - //Buffer Resources::Debug::ModelData = Buffer(); - //Buffer Resources::Debug::VPData = Buffer(); - - //ID3D11ShaderResourceView* Resources::Debug::srv = NULL; - //ID3D11RenderTargetView* Resources::Debug::rtv = NULL; - - Core::Init::State Resources::Debug::Init() - { - -#pragma region LoadShaders - /** Load Compute Shaders for d3dcompile */ - Core::PipelineManager::Init(PathFromExeToHlsl + L"ComputeDebug\\" + L"DebugCompute.hlsl", ShaderType::Compute, ComputeDebug); - -#pragma endregion - return Core::Init::Success; - } - - void Resources::Debug::Clean() - { - - } - } - } -} - -#endif \ No newline at end of file diff --git a/Code/OysterGraphics/Render/Resources/Debug.h b/Code/OysterGraphics/Render/Resources/Debug.h deleted file mode 100644 index 3dc2fae2..00000000 --- a/Code/OysterGraphics/Render/Resources/Debug.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -#ifndef Reources_h -#define Reources_h - -#ifdef _DEBUG - -#include "../OysterGraphics/Core/Core.h" - -namespace Oyster -{ - namespace Graphics - { - namespace Render - { - namespace Resources - { - class Debug - { - public: - //static Core::PipelineManager::RenderPass obj; - static Core::PipelineManager::RenderPass debugCompute; - //static Core::Buffer ModelData; - //static Core::Buffer VPData; - - //static ID3D11ShaderResourceView* srv; - //static ID3D11RenderTargetView* rtv; - - static Core::Init::State Init(); - static void Clean(); - }; - } - } - } -} - -#endif - -#endif \ No newline at end of file diff --git a/Code/OysterGraphics/Render/Resources/Deffered.cpp b/Code/OysterGraphics/Render/Resources/Deffered.cpp deleted file mode 100644 index 361a94dd..00000000 --- a/Code/OysterGraphics/Render/Resources/Deffered.cpp +++ /dev/null @@ -1,337 +0,0 @@ -#pragma once - -#include "Deffered.h" -#include "..\..\Definitions\GraphicalDefinition.h" - -typedef Oyster::Graphics::Core::PipelineManager::ShaderType ShaderType; -typedef Oyster::Graphics::Core::PipelineManager::Get GetShader; -typedef Oyster::Graphics::Core::PipelineManager Shader; -typedef Oyster::Graphics::Core::Buffer Buffer; - -const std::wstring PathToHLSL = L"..\\..\\Code\\OysterGraphics\\Shader\\HLSL\\Deffered Shaders\\"; -const std::wstring PathToCSO = L"..\\Content\\Shaders\\"; - -const int KernelSize = 10; -const int SampleSpread = 16; - -namespace Oyster -{ - namespace Graphics - { - namespace Render - { - namespace Resources - { - - ID3D11RenderTargetView* Deffered::GBufferRTV[Deffered::GBufferSize] = {0}; - ID3D11ShaderResourceView* Deffered::GBufferSRV[Deffered::GBufferSize] = {0}; - - ID3D11UnorderedAccessView* Deffered::LBufferUAV[Deffered::LBufferSize] = {0}; - ID3D11ShaderResourceView* Deffered::LBufferSRV[Deffered::LBufferSize] = {0}; - - Shader::RenderPass Deffered::GeometryPass; - Shader::RenderPass Deffered::LightPass; - Shader::RenderPass Deffered::PostPass; - - Buffer Deffered::ModelData = Buffer(); - Buffer Deffered::AnimationData = Buffer(); - Buffer Deffered::LightConstantsData = Buffer(); - - Buffer Deffered::PointLightsData = Buffer(); - ID3D11ShaderResourceView* Deffered::PointLightView = NULL; - - ID3D11ShaderResourceView* Deffered::SSAOKernel = NULL; - ID3D11ShaderResourceView* Deffered::SSAORandom = NULL; - - Core::Init::State Deffered::InitShaders() - { - #ifdef _DEBUG - std::wstring path = PathToHLSL; - std::wstring end = L".hlsl"; -#else - std::wstring path = PathToCSO; - std::wstring end = L".cso"; -#endif - //Load Shaders - Core::PipelineManager::Init(path + L"PixelGatherData" + end, ShaderType::Pixel, L"Geometry"); - Core::PipelineManager::Init(path + L"VertexGatherData" + end, ShaderType::Vertex, L"Geometry"); - Core::PipelineManager::Init(path + L"LightPass" + end, ShaderType::Compute, L"LightPass"); - Core::PipelineManager::Init(path + L"PostPass" + end, ShaderType::Compute, L"PostPass"); - return Core::Init::State::Success; - } - - Core::Init::State Deffered::Init() - { - InitShaders(); - - //Create Buffers - Buffer::BUFFER_INIT_DESC desc; - desc.ElementSize = sizeof(Definitions::PerModel); - desc.NumElements = 1; - desc.InitData = NULL; - desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_VS; - desc.Usage = Buffer::BUFFER_USAGE::BUFFER_CPU_WRITE_DISCARD; - - ModelData.Init(desc); - - desc.NumElements = 1; - desc.ElementSize = sizeof(Definitions::AnimationData); - AnimationData.Init(desc); - - desc.ElementSize = sizeof(Definitions::LightConstants); - desc.NumElements = 1; - desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_CS; - - LightConstantsData.Init(desc); - - desc.ElementSize = sizeof(Definitions::Pointlight); - desc.NumElements = MaxLightSize; - desc.Type = Buffer::STRUCTURED_BUFFER; - PointLightsData.Init(desc); - - ////Create States - D3D11_RASTERIZER_DESC rdesc; - rdesc.CullMode = D3D11_CULL_BACK; - rdesc.FillMode = D3D11_FILL_SOLID; - rdesc.FrontCounterClockwise = false; - rdesc.DepthBias = 0; - rdesc.DepthBiasClamp = 0; - rdesc.DepthClipEnable = true; - rdesc.SlopeScaledDepthBias = 0; - rdesc.ScissorEnable = false; - rdesc.MultisampleEnable = false; - rdesc.AntialiasedLineEnable = false; - - ID3D11RasterizerState* rs = NULL; - Oyster::Graphics::Core::device->CreateRasterizerState(&rdesc,&rs); - - D3D11_SAMPLER_DESC sdesc; - sdesc.Filter = D3D11_FILTER_ANISOTROPIC; - sdesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; - sdesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; - sdesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; - sdesc.MipLODBias = 0; - sdesc.MaxAnisotropy =4; - sdesc.ComparisonFunc = D3D11_COMPARISON_LESS_EQUAL; - *sdesc.BorderColor = *Oyster::Math::Float4(1,1,1,1).element; - sdesc.MinLOD = 0; - sdesc.MaxLOD = D3D11_FLOAT32_MAX; - - ID3D11SamplerState** ss = new ID3D11SamplerState*[1]; - Oyster::Graphics::Core::device->CreateSamplerState(&sdesc,ss); - - D3D11_DEPTH_STENCIL_DESC ddesc; - ddesc.DepthEnable = true; - ddesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; - ddesc.DepthFunc = D3D11_COMPARISON_LESS; - - ddesc.StencilEnable = true; - ddesc.StencilReadMask = 0xFF; - ddesc.StencilWriteMask = 0xFF; - - ddesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; - ddesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR; - ddesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; - ddesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS; - - ddesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP; - ddesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR; - ddesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP; - ddesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS; - - ID3D11DepthStencilState* dsState; - Core::device->CreateDepthStencilState(&ddesc,&dsState); - - //Create Views - for(int i = 0; i< Resources::Deffered::GBufferSize; ++i) - { - Core::Init::CreateLinkedShaderResourceFromTexture(&GBufferRTV[i],&GBufferSRV[i],NULL); - } - - for(int i = 0; i < Resources::Deffered::LBufferSize; ++i) - { - Core::Init::CreateLinkedShaderResourceFromTexture(NULL,&LBufferSRV[i],&LBufferUAV[i]); - } - - Buffer* b = &PointLightsData; - - Core::Init::CreateLinkedShaderResourceFromStructuredBuffer(&b,&PointLightView,NULL); - srand((unsigned int)time(0)); - - //SSAO - Math::Vector3 kernel[KernelSize]; - Math::Vector3 random[SampleSpread]; - for(int i = 0;i < KernelSize; ++i) - { - kernel[i] = Oyster::Math::Vector3::null; - while( kernel[i] == Oyster::Math::Vector3::null ) - { - kernel[i] = Oyster::Math::Vector3( - (float)rand() / (RAND_MAX + 1) * (1 - -1) + -1, - (float)rand() / (RAND_MAX + 1) * (1 - -1) + -1, - (float)rand() / (RAND_MAX + 1) * (1 - 0) + 0); - } - kernel[i].Normalize(); - - float scale = float(i) / float(KernelSize); - - scale = (0.1f*(1 - scale * scale) + 1.0f *( scale * scale)); - kernel[i] *= scale; - - - } - - for( int i = 0; i < SampleSpread; ++i) - { - random[i] = Oyster::Math::Vector3::null; - while( random[i] == Oyster::Math::Vector3::null ) - { - random[i] = Oyster::Math::Vector3( - (float)rand() / (RAND_MAX + 1) * (1 - -1)+ -1, - /*(float)rand() / (RAND_MAX + 1) * (1 - -1)+ -1,*/ - 1.0f, - 0.0f); - } - random[i].Normalize(); - } - - D3D11_TEXTURE1D_DESC T1desc; - T1desc.Width = KernelSize; - T1desc.MipLevels = T1desc.ArraySize = 1; - T1desc.Format = DXGI_FORMAT_R32G32B32_FLOAT; - T1desc.Usage = D3D11_USAGE_DEFAULT; - T1desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; - T1desc.CPUAccessFlags = 0; - T1desc.MiscFlags = 0; - - D3D11_SUBRESOURCE_DATA sphere; - sphere.pSysMem = kernel; - - D3D11_SUBRESOURCE_DATA rnd; - rnd.pSysMem = random; - rnd.SysMemPitch = sqrt(SampleSpread) * sizeof(Oyster::Math::Vector3); - - ID3D11Texture1D *pTexture1; - - Core::device->CreateTexture1D( &T1desc, &sphere, &pTexture1 ); - Core::device->CreateShaderResourceView( pTexture1, 0, &SSAOKernel ); - pTexture1->Release(); - - D3D11_TEXTURE2D_DESC T2desc; - T2desc.Width = KernelSize; - T2desc.MipLevels = T2desc.ArraySize = 1; - T2desc.Format = DXGI_FORMAT_R32G32B32_FLOAT; - T2desc.Usage = D3D11_USAGE_DEFAULT; - T2desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; - T2desc.CPUAccessFlags = 0; - T2desc.MiscFlags = 0; - T2desc.Height = sqrt(SampleSpread); - T2desc.Width = SampleSpread/sqrt(SampleSpread); - T2desc.SampleDesc.Quality = 0; - T2desc.SampleDesc.Count = 1; - - ID3D11Texture2D *pTexture2; - - Core::device->CreateTexture2D( &T2desc, &rnd, &pTexture2 ); - Core::device->CreateShaderResourceView( (pTexture2), 0, &SSAORandom ); - pTexture2->Release(); - - ////Create ShaderEffects - - ////---------------- Geometry Pass Setup ---------------------------- - GeometryPass.Shaders.Pixel = GetShader::Pixel(L"Geometry"); - GeometryPass.Shaders.Vertex = GetShader::Vertex(L"Geometry"); - - D3D11_INPUT_ELEMENT_DESC indesc[] = - { - { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "TANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 32, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "BITANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 44, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "BONEINDEX", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 56, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "BONEWEIGHT", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 72, D3D11_INPUT_PER_VERTEX_DATA, 0 } - }; - - Shader::CreateInputLayout(indesc,7,GetShader::Vertex(L"Geometry"),GeometryPass.IAStage.Layout); - GeometryPass.IAStage.Topology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; - GeometryPass.CBuffers.Vertex.push_back(AnimationData); - GeometryPass.CBuffers.Vertex.push_back(ModelData); - GeometryPass.RenderStates.Rasterizer = rs; - GeometryPass.RenderStates.SampleCount = 1; - GeometryPass.RenderStates.SampleState = ss; - GeometryPass.RenderStates.DepthStencil = dsState; - for(int i = 0; i Output; - -[numthreads(16, 16, 1)] -void main( uint3 DTid : SV_DispatchThreadID ) -{ - //Output[DTid.xy] = Diffuse[DTid.xy] + Specular[DTid.xy] + Diffuse[DTid.xy] * Ambient[DTid.xy/2].w;// + float4(Ambient[DTid.xy/4].xyz,1); GLOW - //Output[DTid.xy] = Ambient[DTid.xy/2]; - Output[DTid.xy] = Diffuse[DTid.xy] + Specular[DTid.xy]; -} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/VertexGatherData.hlsl b/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/VertexGatherData.hlsl deleted file mode 100644 index 7395e08d..00000000 --- a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/VertexGatherData.hlsl +++ /dev/null @@ -1,24 +0,0 @@ -#include "GBufferHeader.hlsli" - -VertexOut main( VertexIn input ) -{ - VertexOut output; - /*input.pos = ( - (mul(BoneAnimation[input.boneIndex.x], input.pos) * input.boneWeight.x) + - (mul(BoneAnimation[input.boneIndex.y], input.pos) * input.boneWeight.y) + - (mul(BoneAnimation[input.boneIndex.z], input.pos) * input.boneWeight.z) + - (mul(BoneAnimation[input.boneIndex.w], input.pos) * input.boneWeight.w) - * Animated) + input.pos * int(1-Animated);*/ - - input.pos = ( - (mul(BoneAnimation[input.boneIndex.x], input.pos)/* * input.boneWeight.x*/) - * Animated) + input.pos * int(1-Animated); - - //float4x4 m = matrix(float4(1,0,0,0),float4(0,1,0,0), float4(0,0,1,0), float4(0,0,0,1)); - //input.pos = mul(BoneAnimation[0], float4(input.pos,1)); - //input.pos = mul(m, float4(input.pos,1)); - output.pos = mul(WVP, float4(input.pos,1)); - output.normal = mul(WV, float4(input.normal,0)).xyz; - output.UV = input.UV; - return output; -} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/2DGeometry.hlsl b/Code/OysterGraphics/Shader/Passes/2D/2DGeometry.hlsl new file mode 100644 index 00000000..56b6294f --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/2D/2DGeometry.hlsl @@ -0,0 +1,22 @@ +#include "Header.hlsli" + +[maxvertexcount(4)] +void main(point Vertex2DIn input[1],inout TriangleStream Quads) +{ + Pixel2DIn output; + output.Pos = mul(float4(-1,-1,0,1) ,Translation); + output.Uv = float2(0,1); + Quads.Append(output); + + output.Pos = mul(float4(-1,1,0,1), Translation); + output.Uv = float2(0,0); + Quads.Append(output); + + output.Pos = mul(float4(1,-1,0,1), Translation); + output.Uv = float2(1,1); + Quads.Append(output); + + output.Pos = mul(float4(1,1,0,1), Translation); + output.Uv = float2(1,0); + Quads.Append(output); +} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl b/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl new file mode 100644 index 00000000..a09111b9 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/2D/2DPixel.hlsl @@ -0,0 +1,6 @@ +#include "Header.hlsli" + +float4 main(Pixel2DIn input) : SV_Target0 +{ + return Material.Sample(LinearSampler,input.Uv); +} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/2DVertex.hlsl b/Code/OysterGraphics/Shader/Passes/2D/2DVertex.hlsl new file mode 100644 index 00000000..447d3535 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/2D/2DVertex.hlsl @@ -0,0 +1,6 @@ +#include "Header.hlsli" + +Vertex2DIn main(Vertex2DIn input) +{ + return input; +} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli b/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli new file mode 100644 index 00000000..5a026d34 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/2D/Header.hlsli @@ -0,0 +1,18 @@ +struct Vertex2DIn +{ + float2 Pos : Position; +}; + +cbuffer EveryObject2D : register(c0) +{ + float4x4 Translation; +}; + +struct Pixel2DIn +{ + float4 Pos : SV_Position; + float2 Uv : TEXCOORD; +}; + +Texture2D Material : register(t0); +SamplerState LinearSampler : register(s0); \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/Blur/BlurHor.hlsl b/Code/OysterGraphics/Shader/Passes/Blur/BlurHor.hlsl new file mode 100644 index 00000000..7489cd41 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/Blur/BlurHor.hlsl @@ -0,0 +1,33 @@ +#include "BlurSharedData.hlsli" + +[numthreads(N,1,1)] +void main(int3 ThreadID : SV_DispatchThreadID, int3 gThreadID : SV_GroupThreadID) +{ + + if(gThreadID.x < blurRadius) + { + int x = max(ThreadID.x-blurRadius,0); + gCache[gThreadID.x] = inTex[int2(x,ThreadID.y)]; + } + if(gThreadID.x >= N-blurRadius) + { + int x = min(ThreadID.x+blurRadius,inTex.Length.x-1); + gCache[gThreadID.x+2*blurRadius] = inTex[int2(x,ThreadID.y)]; + } + gCache[gThreadID.x+blurRadius] = inTex[min(ThreadID.xy,inTex.Length.xy-1)]; + + GroupMemoryBarrierWithGroupSync(); + + float4 blurCol = float4(0,0,0,0); + + [unroll] + for(int i = -blurRadius; i <= blurRadius;++i) + { + int k = gThreadID.x + blurRadius + i; + blurCol +=Weights[i + blurRadius] * gCache[k]; + } + + outTex[ThreadID.xy] = blurCol; + //Output[ThreadID.xy] = Diffuse[((ThreadID.xy))]; +} + diff --git a/Code/OysterGraphics/Shader/Passes/Blur/BlurSharedData.hlsli b/Code/OysterGraphics/Shader/Passes/Blur/BlurSharedData.hlsli new file mode 100644 index 00000000..8a7b5fd1 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/Blur/BlurSharedData.hlsli @@ -0,0 +1,35 @@ +#ifndef BLURSHAREDDATA +#define BLURSHAREDDATA + + + +static const float Weights[9] = +{ + 0.05f, 0.05f, 0.1f, 0.15f, 0.3f, 0.15f, 0.1f, 0.05f, 0.05f +}; + +static const int blurRadius = 4; + +#define N 128 +#define gSize (N+2*blurRadius) +groupshared float4 gCache[gSize]; + +Texture2D inTex : register(t0); +RWTexture2D outTex : register(u0); + +//cbuffer BlurrData : register(c0) +//{ +// static const int blurRadius = 5; +// static const float Weights[11] = +// { +// 0.05f,0.05f,0.1f,0.1f,0.1f,0.2f,0.1f,0.1f,0.1f,0.05f,0.05f +// }; +//}; + +//[numthreads(16,16,1)] +//void TryCompute(uint3 ThreadID : SV_DispatchThreadID) +//{ +// Output[ThreadID.xy] = Diffuse[ThreadID.xy]*0.5f+Glow[ThreadID.xy]*Glow[ThreadID.xy].w; +//} + +#endif \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/Blur/BlurVert.hlsl b/Code/OysterGraphics/Shader/Passes/Blur/BlurVert.hlsl new file mode 100644 index 00000000..aa5e4a27 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/Blur/BlurVert.hlsl @@ -0,0 +1,32 @@ +#include "BlurSharedData.hlsli" + +[numthreads(1,N,1)] +void main(int3 ThreadID : SV_DispatchThreadID, int3 gThreadID : SV_GroupThreadID) +{ + + if(gThreadID.y < blurRadius) + { + int y = max(ThreadID.y-blurRadius,0); + gCache[gThreadID.y] = inTex[int2(ThreadID.x,y)]; + } + if(gThreadID.y >= N-blurRadius) + { + int y = min(ThreadID.y+blurRadius,inTex.Length.y-1); + gCache[gThreadID.y+2*blurRadius] = inTex[int2(ThreadID.x,y)]; + } + gCache[gThreadID.y+blurRadius] = inTex[min(ThreadID.xy,inTex.Length.xy-1)]; + + GroupMemoryBarrierWithGroupSync(); + + float4 blurCol = float4(0,0,0,0); + + [unroll] + for(int i = -blurRadius; i <= blurRadius;++i) + { + int k = gThreadID.y + blurRadius + i; + blurCol +=Weights[i + blurRadius] * gCache[k]; + } + + outTex[ThreadID.xy] = blurCol; + //Output[ThreadID.xy] = inTex[((ThreadID.xy))]; +} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/PixelGatherData.hlsl b/Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl similarity index 52% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/PixelGatherData.hlsl rename to Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl index de06ce7f..b0a2f40f 100644 --- a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/PixelGatherData.hlsl +++ b/Code/OysterGraphics/Shader/Passes/Gather/GatherPixel.hlsl @@ -1,9 +1,9 @@ -#include "GBufferHeader.hlsli" +#include "Header.hlsli" PixelOut main(VertexOut input) { PixelOut output; output.DiffuseGlow = Diffuse.Sample(S1, input.UV); - output.NormalSpec = float4(normalize(input.normal), 1.0f); + output.NormalSpec = float4(normalize(input.normal), Normal.Sample(S1,input.UV).w); return output; } \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/Passes/Gather/GatherVertex.hlsl b/Code/OysterGraphics/Shader/Passes/Gather/GatherVertex.hlsl new file mode 100644 index 00000000..4042c224 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/Gather/GatherVertex.hlsl @@ -0,0 +1,20 @@ +#include "Header.hlsli" + +VertexOut main( VertexIn input ) +{ + VertexOut output; + + Matrix boneTrans = AnimatedData[input.boneIndex.x]*input.boneWeight.x + + AnimatedData[input.boneIndex.y]*input.boneWeight.y + + AnimatedData[input.boneIndex.z]*input.boneWeight.z + + AnimatedData[input.boneIndex.w]*input.boneWeight.w; + + input.pos = mul(boneTrans,float4(input.pos,1)).xyz * Animated + input.pos * int(1-Animated); + + input.normal = mul(boneTrans,float4(input.normal,1)).xyz * Animated + input.normal * int(1-Animated); + + output.pos = mul(WVP, float4(input.pos,1)); + output.normal = mul(WV, float4(input.normal,0)).xyz; + output.UV = input.UV; + return output; +} \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/GBufferHeader.hlsli b/Code/OysterGraphics/Shader/Passes/Gather/Header.hlsli similarity index 95% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/GBufferHeader.hlsli rename to Code/OysterGraphics/Shader/Passes/Gather/Header.hlsli index f28c1b0b..a313a649 100644 --- a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/GBufferHeader.hlsli +++ b/Code/OysterGraphics/Shader/Passes/Gather/Header.hlsli @@ -32,13 +32,13 @@ SamplerState S1 : register(s0); cbuffer Animation : register(b0) { - float4x4 BoneAnimation[100]; - int Animated; - float3 Pad; + float4x4 AnimatedData[100]; } cbuffer PerModel : register(b1) { matrix WV; matrix WVP; + int Animated; + float3 Pad; } \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/Defines.hlsli b/Code/OysterGraphics/Shader/Passes/Light/Defines.hlsli similarity index 71% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/Defines.hlsli rename to Code/OysterGraphics/Shader/Passes/Light/Defines.hlsli index 1f1061d1..adf01e9d 100644 --- a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/Defines.hlsli +++ b/Code/OysterGraphics/Shader/Passes/Light/Defines.hlsli @@ -27,12 +27,13 @@ cbuffer LightConstants : register(b0) Texture2D DiffuseGlow : register(t0); Texture2D NormalSpec : register(t1); -Texture2D DepthTexture : register(t2); +Texture2D GUI : register(t2); +Texture2D DepthTexture : register(t3); -StructuredBuffer Points : register(t3); +StructuredBuffer Points : register(t4); -Texture1D SSAOKernel : register(t4); -Texture2D SSAORand : register(t5); +Texture1D SSAOKernel : register(t5); +Texture2D SSAORand : register(t6); RWTexture2D Diffuse : register(u0); RWTexture2D Specular : register(u1); diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/LightCalc.hlsli b/Code/OysterGraphics/Shader/Passes/Light/LightCalc.hlsli similarity index 100% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/LightCalc.hlsli rename to Code/OysterGraphics/Shader/Passes/Light/LightCalc.hlsli diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/LightPass.hlsl b/Code/OysterGraphics/Shader/Passes/Light/LightPass.hlsl similarity index 72% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/LightPass.hlsl rename to Code/OysterGraphics/Shader/Passes/Light/LightPass.hlsl index d10484ef..dc54187e 100644 --- a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/LightPass.hlsl +++ b/Code/OysterGraphics/Shader/Passes/Light/LightPass.hlsl @@ -27,16 +27,16 @@ void main( uint3 DTid : SV_DispatchThreadID, uint3 GTid : SV_GroupThreadID ) Shaded.Specular += light.Specular; } - //Diffuse[DTid.xy] = float4(Shaded.Diffuse * DiffuseGlow[DTid.xy].xyz,1); - Diffuse[DTid.xy] = float4(DiffuseGlow[DTid.xy].xyz,1); - - Specular[DTid.xy] = float4(Shaded.Specular, 1); + Diffuse[DTid.xy] = float4(Shaded.Diffuse * DiffuseGlow[DTid.xy].xyz,0); + Specular[DTid.xy] = float4(Shaded.Specular, 0); if(DTid.x & 1 && DTid.y & 1 ) { float AmbValue = GetSSAO(ViewPos, UV, DTid.xy, GTid.xy/2); - Ambient[DTid.xy/2] = AmbValue; + Ambient[DTid.xy/2] = float4(DiffuseGlow[DTid.xy].xyz, AmbValue); + Ambient[DTid.xy/2 + float2(Pixels.x/2, 0)] = GUI[DTid.xy]; + //Ambient[DTid.xy] = GUI[DTid.xy]; } } \ No newline at end of file diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/PosManipulation.hlsli b/Code/OysterGraphics/Shader/Passes/Light/PosManipulation.hlsli similarity index 100% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/PosManipulation.hlsli rename to Code/OysterGraphics/Shader/Passes/Light/PosManipulation.hlsli diff --git a/Code/OysterGraphics/Shader/HLSL/Deffered Shaders/SSAO.hlsli b/Code/OysterGraphics/Shader/Passes/Light/SSAO.hlsli similarity index 100% rename from Code/OysterGraphics/Shader/HLSL/Deffered Shaders/SSAO.hlsli rename to Code/OysterGraphics/Shader/Passes/Light/SSAO.hlsli diff --git a/Code/OysterGraphics/Shader/Passes/Post/PostPass.hlsl b/Code/OysterGraphics/Shader/Passes/Post/PostPass.hlsl new file mode 100644 index 00000000..b219bd28 --- /dev/null +++ b/Code/OysterGraphics/Shader/Passes/Post/PostPass.hlsl @@ -0,0 +1,26 @@ +Texture2D Diffuse : register(t0); +Texture2D Specular : register(t1); +Texture2D Ambient : register(t2); + +RWTexture2D Output; + +cbuffer Size : register(b0) +{ + int2 Pixels; +} + +#define AmbFactor 0.3f; + +[numthreads(16, 16, 1)] +void main( uint3 DTid : SV_DispatchThreadID ) +{ + float4 Light = Diffuse[DTid.xy] + saturate(Specular[DTid.xy]); + float4 Amb = float4(Ambient[DTid.xy/2].xyz * Ambient[DTid.xy/2].w, 0); + float4 GUI; + uint2 index = DTid.xy/2 + int2(Pixels.x/2,0); + float3 PostLight = Amb.xyz * AmbFactor; + PostLight = PostLight + Light.xyz; + GUI = float4(Ambient[index]); + PostLight = PostLight * (1 - GUI.w); + Output[DTid.xy] = float4((GUI.xyz * GUI.w) + PostLight, 1); +} \ No newline at end of file diff --git a/Code/Tester/MainTest.cpp b/Code/Tester/MainTest.cpp index dcafe91f..a577f010 100644 --- a/Code/Tester/MainTest.cpp +++ b/Code/Tester/MainTest.cpp @@ -20,8 +20,10 @@ HWND g_hWnd = NULL; Oyster::Graphics::Model::Model* m = NULL; Oyster::Graphics::Model::Model* m2 = NULL; Oyster::Graphics::Model::Model* m3 = NULL; +Oyster::Graphics::API::Texture t = NULL; Oyster::Math::Float4x4 V; Oyster::Math::Float4x4 P; +Oyster::Graphics::Definitions::Pointlight pl; //-------------------------------------------------------------------------------------- @@ -90,6 +92,8 @@ int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdL } } + Oyster::Graphics::API::Option o = Oyster::Graphics::API::GetOption(); + Oyster::Graphics::API::DeleteModel(m); Oyster::Graphics::API::DeleteModel(m2); Oyster::Graphics::API::DeleteModel(m3); @@ -158,27 +162,29 @@ HRESULT InitDirect3D() { return E_FAIL; } + Oyster::Graphics::API::Option o = Oyster::Graphics::API::GetOption(); + o.modelPath = L"..\\Content\\Models\\"; + o.texturePath = L"..\\Content\\Textures\\"; + Oyster::Graphics::API::SetOptions(o); + + m = Oyster::Graphics::API::CreateModel(L"crate_colonists.dan"); + m2 = Oyster::Graphics::API::CreateModel(L"char_fake_bin.dan"); + m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3::null,Oyster::Math::Float3(0,0,0),Oyster::Math::Float3::null); + Oyster::Graphics::API::PlayAnimation(m2, L"Bend",true); - m = Oyster::Graphics::API::CreateModel(L"untitled.dan"); - m2 = Oyster::Graphics::API::CreateModel(L"still.dan"); - m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3::null,Oyster::Math::Float3(0,5,0),Oyster::Math::Float3::null); - m2->AnimationPlaying = 0; - m2->AnimationTime = 0.0f; - //m3 = Oyster::Graphics::API::CreateModel(L"box_2.dan"); - //m3->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3::null,Oyster::Math::Float3(0,5,0),Oyster::Math::Float3::null); - + t = Oyster::Graphics::API::CreateTexture(L"structure_corp_mdg.png"); P = Oyster::Math3D::ProjectionMatrix_Perspective(Oyster::Math::pi/2,1280.0f/720.0f,.1f,10000); Oyster::Graphics::API::SetProjection(P); - V = Oyster::Math3D::OrientationMatrix_LookAtDirection(Oyster::Math::Float3(0,0,-1),Oyster::Math::Float3(0,1,0),Oyster::Math::Float3(0,200,500.4f)); + V = Oyster::Math3D::OrientationMatrix_LookAtDirection(Oyster::Math::Float3(0,0,-1),Oyster::Math::Float3(0,1,0),Oyster::Math::Float3(0,0,5.4f)); V = V.GetInverse(); - Oyster::Graphics::Definitions::Pointlight pl; - pl.Color = Oyster::Math::Float3(1,1,1); + + pl.Color = Oyster::Math::Float3(1,0,1); pl.Bright = 1; - pl.Pos = Oyster::Math::Float3(0,-20.0f,30.4f); + pl.Pos = Oyster::Math::Float3(0,-20.0f,0.4f); pl.Radius = 90; Oyster::Graphics::API::AddLight(pl); @@ -189,16 +195,11 @@ HRESULT InitDirect3D() float angle = 0; HRESULT Update(float deltaTime) { - angle += Oyster::Math::pi/16 * deltaTime; - //m->WorldMatrix = Oyster::Math3D::RotationMatrix_AxisY(angle) * Oyster::Math3D::RotationMatrix_AxisX(-Oyster::Math::pi/2); - m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3(0,1,0)*-Oyster::Math::pi/2,Oyster::Math::Float3(0,-4,0),Oyster::Math::Float3::null); - Oyster::Math::Matrix ma = Oyster::Math::Matrix::identity; - ma *= 50; - ma.m44 = 1; - m2->WorldMatrix = m2->WorldMatrix * ma; - m2->AnimationTime += deltaTime * 0.5f; - //m3->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3(1,0,0)*-0,Oyster::Math::Float3(3,4,-1*angle),Oyster::Math::Float3::null); + m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3(0,1,0)*-angle,Oyster::Math::Float3(0,0,0),Oyster::Math::Float3::null); + //Oyster::Math::Matrix ma = Oyster::Math::Matrix::identity; + Oyster::Graphics::API::Update(deltaTime); + //m2->Animation.data.AnimationTime += deltaTime;// * 0.5f; return S_OK; } @@ -207,10 +208,10 @@ HRESULT Render(float deltaTime) Oyster::Graphics::API::SetView(V); Oyster::Graphics::API::NewFrame(); - //Oyster::Graphics::API::RenderModel(*m); - Oyster::Graphics::API::RenderModel(*m2); - //Oyster::Graphics::API::RenderModel(*m3); - + Oyster::Graphics::API::RenderModel(m); + Oyster::Graphics::API::RenderModel(m2); + Oyster::Graphics::API::StartGuiRender(); + Oyster::Graphics::API::RenderGuiElement(t,Oyster::Math::Float2(0.5f,0.5f),Oyster::Math::Float2(0.2f,0.2f)); Oyster::Graphics::API::EndFrame(); return S_OK; @@ -248,6 +249,17 @@ LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam Oyster::Graphics::API::ReloadShaders(); #endif break; + //Z - + case 0x5A: + //m2->AnimationTime -= 0.1f; + //if(m2->AnimationTime < 0) + //m2->AnimationTime = 0; + break; + //X + + case 0x58: + //m2->AnimationTime += 0.1f; + break; + } break;