Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 490aa84

Browse files
committed
Rendering experiments
1 parent aebc1a4 commit 490aa84

File tree

10 files changed

+911
-432
lines changed

10 files changed

+911
-432
lines changed

‎ascii-render.vcxproj‎

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,32 +22,32 @@
2222
<ProjectGuid>{8210BE36-4F8D-4CDA-BA18-5D0A55A072F4}</ProjectGuid>
2323
<Keyword>Win32Proj</Keyword>
2424
<RootNamespace>asciirender</RootNamespace>
25-
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
25+
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
2626
</PropertyGroup>
2727
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
2828
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
2929
<ConfigurationType>Application</ConfigurationType>
3030
<UseDebugLibraries>true</UseDebugLibraries>
31-
<PlatformToolset>v140</PlatformToolset>
31+
<PlatformToolset>v143</PlatformToolset>
3232
<CharacterSet>Unicode</CharacterSet>
3333
</PropertyGroup>
3434
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
3535
<ConfigurationType>Application</ConfigurationType>
3636
<UseDebugLibraries>false</UseDebugLibraries>
37-
<PlatformToolset>v140</PlatformToolset>
37+
<PlatformToolset>v143</PlatformToolset>
3838
<WholeProgramOptimization>true</WholeProgramOptimization>
3939
<CharacterSet>Unicode</CharacterSet>
4040
</PropertyGroup>
4141
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
4242
<ConfigurationType>Application</ConfigurationType>
4343
<UseDebugLibraries>true</UseDebugLibraries>
44-
<PlatformToolset>v140</PlatformToolset>
44+
<PlatformToolset>v143</PlatformToolset>
4545
<CharacterSet>Unicode</CharacterSet>
4646
</PropertyGroup>
4747
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
4848
<ConfigurationType>Application</ConfigurationType>
4949
<UseDebugLibraries>false</UseDebugLibraries>
50-
<PlatformToolset>v140</PlatformToolset>
50+
<PlatformToolset>v143</PlatformToolset>
5151
<WholeProgramOptimization>true</WholeProgramOptimization>
5252
<CharacterSet>Unicode</CharacterSet>
5353
</PropertyGroup>
@@ -89,14 +89,21 @@
8989
<Optimization>Disabled</Optimization>
9090
<PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
9191
<SDLCheck>true</SDLCheck>
92-
<AdditionalIncludeDirectories>$(DXSDK_DIR)\Include\</AdditionalIncludeDirectories>
92+
<AdditionalIncludeDirectories>
93+
</AdditionalIncludeDirectories>
94+
<OpenMPSupport>true</OpenMPSupport>
95+
<IntrinsicFunctions>true</IntrinsicFunctions>
96+
<LanguageStandard>stdcpp20</LanguageStandard>
9397
</ClCompile>
9498
<Link>
9599
<SubSystem>Windows</SubSystem>
96100
<GenerateDebugInformation>true</GenerateDebugInformation>
97101
<AdditionalLibraryDirectories>$(DXSDK_DIR)\Lib\x86\</AdditionalLibraryDirectories>
98102
<EntryPointSymbol>wmainCRTStartup</EntryPointSymbol>
99103
</Link>
104+
<Manifest>
105+
<EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
106+
</Manifest>
100107
</ItemDefinitionGroup>
101108
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
102109
<ClCompile>
@@ -106,14 +113,21 @@
106113
<Optimization>Disabled</Optimization>
107114
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
108115
<SDLCheck>true</SDLCheck>
109-
<AdditionalIncludeDirectories>$(DXSDK_DIR)\Include\</AdditionalIncludeDirectories>
116+
<AdditionalIncludeDirectories>
117+
</AdditionalIncludeDirectories>
118+
<OpenMPSupport>true</OpenMPSupport>
119+
<IntrinsicFunctions>true</IntrinsicFunctions>
120+
<LanguageStandard>stdcpp20</LanguageStandard>
110121
</ClCompile>
111122
<Link>
112123
<SubSystem>Windows</SubSystem>
113124
<GenerateDebugInformation>true</GenerateDebugInformation>
114125
<AdditionalLibraryDirectories>$(DXSDK_DIR)\Lib\x64\</AdditionalLibraryDirectories>
115126
<EntryPointSymbol>wmainCRTStartup</EntryPointSymbol>
116127
</Link>
128+
<Manifest>
129+
<EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
130+
</Manifest>
117131
</ItemDefinitionGroup>
118132
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
119133
<ClCompile>
@@ -125,7 +139,10 @@
125139
<IntrinsicFunctions>true</IntrinsicFunctions>
126140
<PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
127141
<SDLCheck>true</SDLCheck>
128-
<AdditionalIncludeDirectories>$(DXSDK_DIR)\Include\</AdditionalIncludeDirectories>
142+
<AdditionalIncludeDirectories>
143+
</AdditionalIncludeDirectories>
144+
<OpenMPSupport>true</OpenMPSupport>
145+
<LanguageStandard>stdcpp20</LanguageStandard>
129146
</ClCompile>
130147
<Link>
131148
<SubSystem>Windows</SubSystem>
@@ -135,6 +152,9 @@
135152
<AdditionalLibraryDirectories>$(DXSDK_DIR)\Lib\x86\</AdditionalLibraryDirectories>
136153
<EntryPointSymbol>wmainCRTStartup</EntryPointSymbol>
137154
</Link>
155+
<Manifest>
156+
<EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
157+
</Manifest>
138158
</ItemDefinitionGroup>
139159
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
140160
<ClCompile>
@@ -146,7 +166,10 @@
146166
<IntrinsicFunctions>true</IntrinsicFunctions>
147167
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
148168
<SDLCheck>true</SDLCheck>
149-
<AdditionalIncludeDirectories>$(DXSDK_DIR)\Include\</AdditionalIncludeDirectories>
169+
<AdditionalIncludeDirectories>
170+
</AdditionalIncludeDirectories>
171+
<OpenMPSupport>true</OpenMPSupport>
172+
<LanguageStandard>stdcpp20</LanguageStandard>
150173
</ClCompile>
151174
<Link>
152175
<SubSystem>Windows</SubSystem>
@@ -156,6 +179,9 @@
156179
<AdditionalLibraryDirectories>$(DXSDK_DIR)\Lib\x64\</AdditionalLibraryDirectories>
157180
<EntryPointSymbol>wmainCRTStartup</EntryPointSymbol>
158181
</Link>
182+
<Manifest>
183+
<EnableDpiAwareness>PerMonitorHighDPIAware</EnableDpiAwareness>
184+
</Manifest>
159185
</ItemDefinitionGroup>
160186
<ItemGroup>
161187
<ClCompile Include="drawing.cpp" />
@@ -189,6 +215,9 @@
189215
<ItemGroup>
190216
<None Include="math.inl" />
191217
</ItemGroup>
218+
<ItemGroup>
219+
<Natvis Include="support\ascii-render.natvis" />
220+
</ItemGroup>
192221
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
193222
<ImportGroup Label="ExtensionTargets">
194223
</ImportGroup>

‎ascii-render.vcxproj.filters‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
<Filter Include="mesh">
2020
<UniqueIdentifier>{317dece4-ddc7-4381-8928-8967e84d50c8}</UniqueIdentifier>
2121
</Filter>
22+
<Filter Include="support">
23+
<UniqueIdentifier>{51b45bd5-73b2-4f4d-8bf1-f8536330e040}</UniqueIdentifier>
24+
</Filter>
2225
</ItemGroup>
2326
<ItemGroup>
2427
<ClCompile Include="toaster\PixelToaster.cpp">
@@ -102,4 +105,9 @@
102105
<Filter>math</Filter>
103106
</None>
104107
</ItemGroup>
108+
<ItemGroup>
109+
<Natvis Include="support\ascii-render.natvis">
110+
<Filter>support</Filter>
111+
</Natvis>
112+
</ItemGroup>
105113
</Project>

‎drawing.cpp‎

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include "drawing.h"
22
#include <algorithm>
33

4+
using std::min;
5+
using std::max;
46
template <typename T> static inline T min(T a, T b, T c) { return std::min(a, std::min(b, c)); }
57
template <typename T> static inline T max(T a, T b, T c) { return std::max(a, std::max(b, c)); }
68

@@ -465,6 +467,7 @@ void generic_triangle_3d(framebuffer_t& buffer,
465467
int CX1 = CY1 - FDY12 * offset_x;
466468
int CX2 = CY2 - FDY20 * offset_x;
467469

470+
//#pragma omp parallel for
468471
for (int x = minx; x < maxx; x++)
469472
{
470473
{
@@ -488,3 +491,64 @@ void generic_triangle_3d(framebuffer_t& buffer,
488491
CY2 += FDX20;
489492
}
490493
}
494+
495+
void generic_line_3d(framebuffer_t& buffer,
496+
float x0, float y0, float z0,
497+
float x1, float y1, float z1,
498+
float c0, float c1)
499+
{
500+
// 28.4 fixed-point coordinates
501+
int X0 = (int)(x0 * 16.0f);
502+
int X1 = (int)(x1 * 16.0f);
503+
int Y0 = (int)(y0 * 16.0f);
504+
int Y1 = (int)(y1 * 16.0f);
505+
506+
// 8.24 fixed-point coordinate
507+
int Z0 = (int)(1.0f / z0 * 0x1000000);
508+
int Z1 = (int)(1.0f / z1 * 0x1000000);
509+
510+
// Swap X/Y if Y is major axis, so X is always major axis
511+
const auto flip = abs(Y1 - Y0) > abs(X1 - X0);
512+
if (flip)
513+
{
514+
std::swap(X0, Y0);
515+
std::swap(X1, Y1);
516+
}
517+
518+
// Always draw left to right
519+
if (X0 > X1)
520+
{
521+
std::swap(X0, X1);
522+
std::swap(Y0, Y1);
523+
std::swap(Z0, Z1);
524+
std::swap(c0, c1);
525+
}
526+
527+
const auto ONE = 16; // sub-pixel precission
528+
const auto DX = X1 - X0;
529+
const auto DY = abs(Y1 - Y0);
530+
const auto step = Y0 < Y1 ? 1 : -1;
531+
532+
auto error = ONE * DX / 2;
533+
auto Y = Y0;
534+
535+
for (int X = X0; X < X1; X += ONE)
536+
{
537+
int Z = Z0 + (Z1 - Z0) * (X - X0) / DX; // 1/z in 8.24 fixed-point coordinate
538+
539+
auto z = 1.0f / (Z * (1.0f / 0x1000000)); // reconstruct z
540+
auto c = c0 + (c1 - c0) * (X - X0) / DX; // interpolate color
541+
542+
if (flip)
543+
buffer.set(Y >> 4, X >> 4, z, c); // draw pixel (x and y are swapped)
544+
else
545+
buffer.set(X >> 4, Y >> 4, z, c); // draw pixel
546+
547+
error = error - DY * ONE;
548+
while (error < 0)
549+
{
550+
Y += step;
551+
error += DX;
552+
}
553+
}
554+
}

‎drawing.h‎

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ void generic_triangle_3d(framebuffer_t& buffer,
2222
float x2, float y2, float z2,
2323
float c0, float c1, float c2);
2424

25+
void generic_line_3d(framebuffer_t& buffer,
26+
float x0, float y0, float z0,
27+
float x1, float y1, float z1,
28+
float c0, float c1);
29+
2530
struct image_t
2631
{
2732
const uint8_t* data;
@@ -71,16 +76,21 @@ struct framebuffer_t
7176

7277
void set(int x, int y, float c)
7378
{
74-
set_color(x, y, c);
79+
if (!clip(x, y))
80+
set_color(x, y, c);
7581
}
7682

7783
void blend(int x, int y, float c, float a)
7884
{
79-
blend_color(x, y, c, a);
85+
if (!clip(x, y))
86+
blend_color(x, y, c, a);
8087
}
8188

8289
void set(int x, int y, float z, float c)
8390
{
91+
if (clip(x, y))
92+
return;
93+
8494
auto& d = depth[width * y + x];
8595
if (z > d)
8696
return;
@@ -111,5 +121,11 @@ struct framebuffer_t
111121
virtual void blend_color(int x, int y, float c, float a) = 0;
112122
virtual void commit_impl() = 0;
113123
virtual void present_impl() = 0;
124+
125+
private:
126+
bool clip(int x, int y) const
127+
{
128+
return x < 0 || y < 0 || x >= width || y >= height;
129+
}
114130
};
115131

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /