Skip to content

Commit 6678c31

Browse files
committed
* developed new tool: texture compiler
* function CreateTexture(const char*) in ResourceManager class now loads a .lrt texture file * moved DevIL image library DLL dependency from LibRenderer to TextureCompiler * added serialization support for Texture class * added native support for DXT1 (compression, decompression, mipmap generation, etc.) * added a color utility class for converting between different pixel formats * some model compiler fixes * other improvements and fixes
1 parent 8f1dde8 commit 6678c31

File tree

136 files changed

+3659
-1356
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

136 files changed

+3659
-1356
lines changed

GITechDemo/Code/AppMain/GITechDemo/GITechDemo.cpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
#include <io.h>
99
#include <fcntl.h>
1010
#include <fstream>
11+
#include <cstdlib>
1112

1213
#include <Renderer.h>
14+
#include <../Utility/ColorUtility.h>
1315
using namespace LibRendererDll;
1416

1517
#define MAX_LOADSTRING 100
@@ -163,6 +165,8 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
163165
case VK_SHIFT:
164166
fSpeedFactor = 5.f;
165167
break;
168+
case VK_CONTROL:
169+
fSpeedFactor = 0.1f;
166170
}
167171
break;
168172

@@ -184,6 +188,8 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
184188
case VK_SHIFT:
185189
fSpeedFactor = 1.f;
186190
break;
191+
case VK_CONTROL:
192+
fSpeedFactor = 1.0f;
187193
}
188194
break;
189195
}
@@ -283,15 +289,14 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
283289
ResourceManager* resMan = renderer->GetResourceManager();
284290

285291
// First of all, load a model file
286-
const unsigned int modelIdx = resMan->CreateModel("Out\\Models\\sponza\\sponza.lrm");
292+
const unsigned int modelIdx = resMan->CreateModel("sponza\\sponza.lrm");
287293
model = resMan->GetModel(modelIdx);
288294

289-
// Create a texture from an image file
290-
const unsigned int tex1Idx = resMan->CreateTexture("checker.jpg"); // sponza_curtain_diff.tga
291-
Tex = resMan->GetTexture(tex1Idx);
292-
293295
// Read the contents of the file
294296
std::ifstream t("simple.hlsl");
297+
//std::ifstream t("normal.hlsl");
298+
//std::ifstream t("normal_scale.hlsl");
299+
//std::ifstream t("pos_only.hlsl");
295300
int length;
296301
t.seekg(0, std::ios::end); // go to the end
297302
length = (int)t.tellg(); // report location (this is the length)
@@ -323,6 +328,9 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
323328
const unsigned int psiIdx = resMan->CreateShaderInput(PShd);
324329
PSInput = resMan->GetShaderInput(psiIdx);
325330

331+
const unsigned int texIdx = resMan->CreateTexture("sponza\\textures\\sponza_curtain_diff.lrt");
332+
Tex = resMan->GetTexture(texIdx);
333+
326334
return TRUE;
327335
}
328336

@@ -451,7 +459,7 @@ void RenderScene()
451459
// Also set the sampling filter to linearly interpolate between texels and mips
452460
renderer->GetSamplerStateManager()->SetFilter(PSInput->GetInputDesc(handle).nRegisterIndex, SF_MIN_MAG_LINEAR_MIP_LINEAR);
453461
}
454-
462+
455463
// Clear our backbuffer so that we have a nice black background
456464
// and a depth value that's as far away as possible (at our Z far, which is 2000.f)
457465
renderer->Clear(Vec4f(0.f, 0.f, 0.f, 0.f), 1.f, 0);
@@ -470,9 +478,7 @@ void RenderScene()
470478
VShd->Enable(VSInput);
471479
PShd->Enable(PSInput);
472480

473-
// Draw the contents of the vertex buffer
474-
//renderer->DrawVertexBuffer(VBuf);
475-
481+
// Draw the contents of the vertex buffers
476482
for (unsigned int mesh = 0; mesh < model->arrMesh.size(); mesh++)
477483
renderer->DrawVertexBuffer(model->arrMesh[mesh]->pVertexBuffer);
478484

GITechDemo/Code/AppMain/GITechDemo/GITechDemo.vcxproj

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,31 +92,37 @@
9292
<LinkIncremental>true</LinkIncremental>
9393
<OutDir>$(SolutionDir)..\..\Bin\$(Platform)\$(Configuration)\$(SolutionName)\</OutDir>
9494
<IntDir>$(SolutionDir)..\..\BinTemp\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
95+
<CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
9596
</PropertyGroup>
9697
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
9798
<LinkIncremental>true</LinkIncremental>
9899
<OutDir>$(SolutionDir)..\..\Bin\$(Platform)\$(Configuration)\$(SolutionName)\</OutDir>
99100
<IntDir>$(SolutionDir)..\..\BinTemp\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
101+
<CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
100102
</PropertyGroup>
101103
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
102104
<LinkIncremental>false</LinkIncremental>
103105
<OutDir>$(SolutionDir)..\..\Bin\$(Platform)\$(Configuration)\$(SolutionName)\</OutDir>
104106
<IntDir>$(SolutionDir)..\..\BinTemp\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
107+
<CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
105108
</PropertyGroup>
106109
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
107110
<LinkIncremental>false</LinkIncremental>
108111
<OutDir>$(SolutionDir)..\..\Bin\$(Platform)\$(Configuration)\$(SolutionName)\</OutDir>
109112
<IntDir>$(SolutionDir)..\..\BinTemp\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
113+
<CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
110114
</PropertyGroup>
111115
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">
112116
<LinkIncremental>false</LinkIncremental>
113117
<OutDir>$(SolutionDir)..\..\Bin\$(Platform)\$(Configuration)\$(SolutionName)\</OutDir>
114118
<IntDir>$(SolutionDir)..\..\BinTemp\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
119+
<CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
115120
</PropertyGroup>
116121
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'">
117122
<LinkIncremental>false</LinkIncremental>
118123
<OutDir>$(SolutionDir)..\..\Bin\$(Platform)\$(Configuration)\$(SolutionName)\</OutDir>
119124
<IntDir>$(SolutionDir)..\..\BinTemp\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
125+
<CustomBuildAfterTargets>Clean</CustomBuildAfterTargets>
120126
</PropertyGroup>
121127
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
122128
<ClCompile>
@@ -134,6 +140,16 @@
134140
<AdditionalLibraryDirectories>
135141
</AdditionalLibraryDirectories>
136142
</Link>
143+
<CustomBuildStep>
144+
<Command>DEL /F /Q "$(OutDir)"</Command>
145+
</CustomBuildStep>
146+
<CustomBuildStep>
147+
<Message>Deleting DLL dependencies</Message>
148+
</CustomBuildStep>
149+
<CustomBuildStep>
150+
<Outputs>
151+
</Outputs>
152+
</CustomBuildStep>
137153
</ItemDefinitionGroup>
138154
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
139155
<ClCompile>
@@ -151,6 +167,16 @@
151167
<AdditionalLibraryDirectories>
152168
</AdditionalLibraryDirectories>
153169
</Link>
170+
<CustomBuildStep>
171+
<Command>DEL /F /Q "$(OutDir)"</Command>
172+
</CustomBuildStep>
173+
<CustomBuildStep>
174+
<Message>Deleting DLL dependencies</Message>
175+
</CustomBuildStep>
176+
<CustomBuildStep>
177+
<Outputs>
178+
</Outputs>
179+
</CustomBuildStep>
154180
</ItemDefinitionGroup>
155181
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
156182
<ClCompile>
@@ -170,6 +196,16 @@
170196
<AdditionalLibraryDirectories>
171197
</AdditionalLibraryDirectories>
172198
</Link>
199+
<CustomBuildStep>
200+
<Command>DEL /F /Q "$(OutDir)"</Command>
201+
</CustomBuildStep>
202+
<CustomBuildStep>
203+
<Message>Deleting DLL dependencies</Message>
204+
</CustomBuildStep>
205+
<CustomBuildStep>
206+
<Outputs>
207+
</Outputs>
208+
</CustomBuildStep>
173209
</ItemDefinitionGroup>
174210
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
175211
<ClCompile>
@@ -189,6 +225,16 @@
189225
<AdditionalLibraryDirectories>
190226
</AdditionalLibraryDirectories>
191227
</Link>
228+
<CustomBuildStep>
229+
<Command>DEL /F /Q "$(OutDir)"</Command>
230+
</CustomBuildStep>
231+
<CustomBuildStep>
232+
<Message>Deleting DLL dependencies</Message>
233+
</CustomBuildStep>
234+
<CustomBuildStep>
235+
<Outputs>
236+
</Outputs>
237+
</CustomBuildStep>
192238
</ItemDefinitionGroup>
193239
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">
194240
<ClCompile>
@@ -208,6 +254,16 @@
208254
<AdditionalLibraryDirectories>
209255
</AdditionalLibraryDirectories>
210256
</Link>
257+
<CustomBuildStep>
258+
<Command>DEL /F /Q "$(OutDir)"</Command>
259+
</CustomBuildStep>
260+
<CustomBuildStep>
261+
<Message>Deleting DLL dependencies</Message>
262+
</CustomBuildStep>
263+
<CustomBuildStep>
264+
<Outputs>
265+
</Outputs>
266+
</CustomBuildStep>
211267
</ItemDefinitionGroup>
212268
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'">
213269
<ClCompile>
@@ -227,6 +283,16 @@
227283
<AdditionalLibraryDirectories>
228284
</AdditionalLibraryDirectories>
229285
</Link>
286+
<CustomBuildStep>
287+
<Command>DEL /F /Q "$(OutDir)"</Command>
288+
</CustomBuildStep>
289+
<CustomBuildStep>
290+
<Message>Deleting DLL dependencies</Message>
291+
</CustomBuildStep>
292+
<CustomBuildStep>
293+
<Outputs>
294+
</Outputs>
295+
</CustomBuildStep>
230296
</ItemDefinitionGroup>
231297
<ItemGroup>
232298
<Text Include="ReadMe.txt" />

GITechDemo/Code/Libraries/LibRenderer/Common/Buffer.cpp

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -46,27 +46,3 @@ Buffer::~Buffer()
4646
assert(m_pData != nullptr || Renderer::GetAPI() == API_NULL);
4747
delete[] m_pData;
4848
}
49-
50-
std::ostream& LibRendererDll::operator<<(std::ostream& output_out, Buffer& buf_in)
51-
{
52-
output_out.write((const char*)&buf_in.m_nElementCount, sizeof(unsigned int));
53-
output_out.write((const char*)&buf_in.m_nElementSize, sizeof(unsigned int));
54-
output_out.write((const char*)&buf_in.m_eBufferUsage, sizeof(BufferUsage));
55-
output_out.write((const char*)&buf_in.m_nSize, sizeof(unsigned int));
56-
output_out.write((const char*)buf_in.m_pData, buf_in.m_nSize);
57-
58-
return output_out;
59-
}
60-
61-
std::istream& LibRendererDll::operator>>(std::istream& s_in, Buffer& buf_out)
62-
{
63-
s_in.read((char*)&buf_out.m_nElementCount, sizeof(unsigned int));
64-
s_in.read((char*)&buf_out.m_nElementSize, sizeof(unsigned int));
65-
s_in.read((char*)&buf_out.m_eBufferUsage, sizeof(BufferUsage));
66-
s_in.read((char*)&buf_out.m_nSize, sizeof(unsigned int));
67-
delete[] buf_out.m_pData;
68-
buf_out.m_pData = new byte[buf_out.m_nSize];
69-
s_in.read((char*)buf_out.m_pData, buf_out.m_nSize);
70-
71-
return s_in;
72-
}

GITechDemo/Code/Libraries/LibRenderer/Common/IndexBuffer.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,3 @@ void IndexBuffer::SetIndices(const unsigned int indicesVal[], const unsigned int
4646
for (unsigned int i = 0; i < size; i++)
4747
SetIndex(i + offset, indicesVal[i]);
4848
}
49-
50-
std::ostream& LibRendererDll::operator<<(std::ostream& output_out, IndexBuffer& ib_in)
51-
{
52-
output_out << *(Buffer*)&ib_in;
53-
output_out.write((const char*)&ib_in.m_eIndexFormat, sizeof(IndexBufferFormat));
54-
55-
return output_out;
56-
}
57-
58-
std::istream& LibRendererDll::operator>>(std::istream& s_in, IndexBuffer& ib_out)
59-
{
60-
s_in >> *(Buffer*)&ib_out;
61-
s_in.read((char*)&ib_out.m_eIndexFormat, sizeof(IndexBufferFormat));
62-
63-
return s_in;
64-
}

GITechDemo/Code/Libraries/LibRenderer/Common/ResourceData.h

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,15 @@ using namespace gmtl;
3737
#endif
3838

3939
// This header holds all defines, enums and
40-
// descriptor structures used by the rendering library
40+
// structures used by the rendering library
4141

4242
// Declare new data types
43+
#include "../Utility/HalfFloat.h"
44+
typedef LibRendererDll::HalfFloat half;
4345
typedef unsigned char byte;
44-
typedef unsigned long DWORD;
46+
typedef unsigned short word;
47+
typedef unsigned long dword;
48+
typedef unsigned long long qword;
4549

4650
namespace LibRendererTools
4751
{
@@ -637,11 +641,11 @@ namespace LibRendererDll
637641
{
638642
bool bCanAutoGenMipmaps;
639643
bool bDynamicTextures;
640-
bool bPresentIntervalImmediate; // no vsync
641-
bool bPresentIntervalOne; // 60Hz
642-
bool bPresentIntervalTwo; // 30Hz
643-
bool bPresentIntervalThree; // 20Hz
644-
bool bPresentIntervalFour; // 15Hz
644+
bool bPresentIntervalImmediate; // no vsync
645+
bool bPresentIntervalOne; // 60Hz
646+
bool bPresentIntervalTwo; // 30Hz
647+
bool bPresentIntervalThree; // 20Hz
648+
bool bPresentIntervalFour; // 15Hz
645649
bool bMrtIndependentBitDepths;
646650
bool bMrtPostPixelShaderBlending;
647651
bool bAnisotropicFiltering;

GITechDemo/Code/Libraries/LibRenderer/Common/ResourceManager.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@
2727
#include "Texture.h"
2828
#include "RenderTarget.h"
2929

30-
#include "Utility/TextureLoader.h"
31-
3230
#include "ResourceManager.h"
3331
using namespace LibRendererDll;
3432

@@ -145,13 +143,23 @@ const unsigned int ResourceManager::CreateShaderTemplate(ShaderProgram* const sh
145143
return (unsigned int)m_arrShaderTemplate.size() - 1;
146144
}
147145

148-
const unsigned int ResourceManager::CreateTexture(const char* pathToFile, const unsigned int mipmapLevelCount, const bool convertToARGB)
146+
const unsigned int ResourceManager::CreateTexture(const char* pathToFile)
149147
{
150-
TextureLoader::ImageDesc desc = TextureLoader::LoadImageFile(pathToFile, convertToARGB);
151-
const unsigned int texIdx = CreateTexture(desc.format, desc.type, desc.width, desc.height, desc.depth, mipmapLevelCount, BU_TEXTURE);
152-
TextureLoader::CopyImageData(GetTexture(texIdx));
153-
TextureLoader::UnloadImageFile();
154-
return texIdx;
148+
const unsigned int texIdx = CreateTexture(PF_NONE, TT_1D, 0, 0, 0, 0, BU_NONE);
149+
std::ifstream texFile;
150+
texFile.open(pathToFile, std::ios::binary);
151+
if (texFile.is_open())
152+
{
153+
texFile >> *GetTexture(texIdx);
154+
texFile.close();
155+
return texIdx;
156+
}
157+
else
158+
{
159+
delete GetTexture(texIdx);
160+
m_arrTexture.pop_back();
161+
return -1;
162+
}
155163
}
156164

157165
const unsigned int ResourceManager::CreateModel(const char* pathToFile)

GITechDemo/Code/Libraries/LibRenderer/Common/ResourceManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ namespace LibRendererDll
7575
// Create a texture
7676
virtual LIBRENDERER_DLL const unsigned int CreateTexture(const PixelFormat texFormat, const TexType texType, const unsigned int sizeX, const unsigned int sizeY = 1, const unsigned int sizeZ = 1, const unsigned int mipmapLevelCount = 0, const BufferUsage usage = BU_TEXTURE) = 0;
7777
// Create a texture and load data from an image file
78-
LIBRENDERER_DLL const unsigned int CreateTexture(const char* pathToFile, const unsigned int mipmapLevelCount = 0, const bool convertToARGB = true);
78+
LIBRENDERER_DLL const unsigned int CreateTexture(const char* pathToFile);
7979

8080
// Create a render target
8181
// NB: The depth buffer is always PF_D24S8

0 commit comments

Comments
 (0)