DXGL r863 - Code Review

Jump to navigation Jump to search
Repository:DXGL
Revision:r862‎ | r863 | r864 >
Date:23:44, 10 September 2018
Author:admin
Status:new
Tags:
Comment:
Add several color conversion functions (currently unused).
Add an upcoming test to the DXGL Config list.
Modified paths:
  • /ddraw/colorconv.c (added) (history)
  • /ddraw/colorconv.h (added) (history)
  • /ddraw/ddraw.vcxproj (modified) (history)
  • /ddraw/ddraw.vcxproj.filters (modified) (history)
  • /ddraw/glTexture.cpp (modified) (history)
  • /ddraw/struct.h (modified) (history)
  • /dxglcfg/dxgltest.cpp (modified) (history)
  • /dxglcfg/tests.cpp (modified) (history)

Diff [purge]

Index: ddraw/colorconv.c
@@ -0,0 +1,187 @@
 2+// DXGL
 3+// Copyright (C) 2018 William Feely
 4+
 5+// This library is free software; you can redistribute it and/or
 6+// modify it under the terms of the GNU Lesser General Public
 7+// License as published by the Free Software Foundation; either
 8+// version 2.1 of the License, or (at your option) any later version.
 9+
 10+// This library is distributed in the hope that it will be useful,
 11+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 13+// Lesser General Public License for more details.
 14+
 15+// You should have received a copy of the GNU Lesser General Public
 16+// License along with this library; if not, write to the Free Software
 17+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 18+
 19+#include "common.h"
 20+#include "colorconv.h"
 21+
 22+__inline unsigned int _1to8(unsigned int input)
 23+{
 24+ return input * 255;
 25+}
 26+
 27+__inline unsigned int _2to8(unsigned int input)
 28+{
 29+ return input * 85;
 30+}
 31+
 32+__inline unsigned int _3to8(unsigned int input)
 33+{
 34+ return (input * 146 + 1) >> 2;
 35+}
 36+
 37+__inline unsigned int _4to8(unsigned int input)
 38+{
 39+ return input * 17;
 40+}
 41+
 42+__inline unsigned int _5to8(unsigned int input)
 43+{
 44+ return (input * 527 + 23) >> 6;
 45+}
 46+
 47+__inline unsigned int _6to8(unsigned int input)
 48+{
 49+ return (input * 259 + 33) >> 6;
 50+}
 51+
 52+void rgba8332torgba8888(size_t count, DWORD *dest, WORD *src)
 53+{
 54+ size_t i;
 55+ WORD in;
 56+ for (i = 0; i < count; i++)
 57+ {
 58+ in = src[i];
 59+ dest[i] = ((in & 0xFF00) << 16) | (_3to8((in & 0xE0) >> 5) << 16) |
 60+ (_3to8((in & 0x1C) >> 2) << 8) | _2to8(in & 0x3);
 61+ }
 62+}
 63+
 64+void rgba8888torgba8332(size_t count, WORD *dest, DWORD *src)
 65+{
 66+ size_t i;
 67+ DWORD in;
 68+ for (i = 0; i < count; i++)
 69+ {
 70+ in = src[i];
 71+ dest[i] = ((in & 0xFF000000) >> 16) | ((in & 0xE00000) >> 16) |
 72+ ((in & 0xE000) >> 11) | ((in & 0xC0) >> 6);
 73+ }
 74+}
 75+
 76+void rgb565torgba8888(size_t count, DWORD *dest, WORD *src)
 77+{
 78+ size_t i;
 79+ DWORD in;
 80+ for (i = 0; i < count; i++)
 81+ {
 82+ in = src[i];
 83+ dest[i] = 0xFF000000 | (_5to8((in & 0xF800) >> 11) << 16) |
 84+ (_6to8((in & 0x7E0) >> 5) << 8) | _5to8(in & 0x1F);
 85+ }
 86+}
 87+
 88+void rgb565torgbx8888(size_t count, DWORD *dest, WORD *src)
 89+{
 90+ size_t i;
 91+ DWORD in;
 92+ for (i = 0; i < count; i++)
 93+ {
 94+ in = src[i];
 95+ dest[i] = (_5to8((in & 0xF800) >> 11) << 16) |
 96+ (_6to8((in & 0x7E0) >> 5) << 8) | _5to8(in & 0x1F);
 97+ }
 98+}
 99+
 100+void rgbx8888torgb565(size_t count, WORD *dest, DWORD *src)
 101+{
 102+ size_t i;
 103+ DWORD in;
 104+ for (i = 0; i < count; i++)
 105+ {
 106+ in = src[i];
 107+ dest[i] = ((in & 0xF80000) >> 8) | ((in & 0xFC00) >> 5)
 108+ | ((in & 0xF8) >> 3);
 109+ }
 110+}
 111+
 112+void rgba1555torgba8888(size_t count, DWORD *dest, WORD *src)
 113+{
 114+ size_t i;
 115+ DWORD in;
 116+ for (i = 0; i < count; i++)
 117+ {
 118+ in = src[i];
 119+ dest[i] = (_1to8((in & 0x8000) >> 15) << 24) | (_5to8((in & 0x7C00) >> 10) << 16) |
 120+ (_5to8((in & 0x3E0) >> 5) << 8) | _5to8(in & 0x1F);
 121+ }
 122+}
 123+
 124+void rgba8888torgba1555(size_t count, WORD *dest, DWORD *src)
 125+{
 126+ size_t i;
 127+ DWORD in;
 128+ for (i = 0; i < count; i++)
 129+ {
 130+ in = src[i];
 131+ dest[i] = ((in & 0x80000000) >> 16) | ((in & 0xF80000) >> 9) |
 132+ ((in & 0xF800) >> 6) | ((in & 0xF8) >> 3);
 133+ }
 134+}
 135+
 136+void rgba4444torgba8888(size_t count, DWORD *dest, WORD *src)
 137+{
 138+ size_t i;
 139+ DWORD in;
 140+ for (i = 0; i < count; i++)
 141+ {
 142+ in = src[i];
 143+ dest[i] = (_4to8((in & 0xF000) >> 12) << 24) | (_4to8((in & 0xF00) >> 8) << 16) |
 144+ (_4to8((in & 0xF0) >> 4) << 8) | _4to8(in & 0xF);
 145+ }
 146+}
 147+
 148+void rgba8888torgba4444(size_t count, WORD *dest, DWORD *src)
 149+{
 150+ size_t i;
 151+ DWORD in;
 152+ for (i = 0; i < count; i++)
 153+ {
 154+ in = src[i];
 155+ dest[i] = ((in & 0xF0000000) >> 16) | ((in & 0xF00000) >> 12) |
 156+ ((in & 0xF000) >> 8) | ((in & 0xF0) >> 4);
 157+ }
 158+}
 159+
 160+__inline DWORD yuvtorgb(DWORD y, DWORD u, DWORD v)
 161+{
 162+ float r, g, b;
 163+ r = y + 1.402f * v;
 164+ g = y - 0.344f * u - 0.714f * v;
 165+ b = y + 1.772f * u;
 166+ if (r > 255.0f) r = 255.0f;
 167+ if (r < 0.0f) r = 0.0f;
 168+ return ((DWORD)r << 16) | ((DWORD)g << 8) || (DWORD)b;
 169+}
 170+
 171+void uyvytorgbx8888(size_t count, DWORD *dest, DWORD *src)
 172+{
 173+ size_t i;
 174+ DWORD in;
 175+ DWORD y, u, v;
 176+ for (i = 0; i < (count << 1); i++)
 177+ {
 178+ in = src[i];
 179+ // first pixel
 180+ y = (src[i] >> 8) & 0xFF;
 181+ u = src[i] & 0xFF;
 182+ v = (src[i] >> 16) & 0xFF;
 183+ dest[i << 1] = yuvtorgb(y, u, v);
 184+ // second pixel
 185+ y = (src[i] >> 24) & 0xFF;
 186+ dest[(i << 1)+1] = yuvtorgb(y, u, v);
 187+ }
 188+}
\ No newline at end of file
Index: ddraw/colorconv.h
@@ -0,0 +1,34 @@
 2+// DXGL
 3+// Copyright (C) 2018 William Feely
 4+
 5+// This library is free software; you can redistribute it and/or
 6+// modify it under the terms of the GNU Lesser General Public
 7+// License as published by the Free Software Foundation; either
 8+// version 2.1 of the License, or (at your option) any later version.
 9+
 10+// This library is distributed in the hope that it will be useful,
 11+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 13+// Lesser General Public License for more details.
 14+
 15+// You should have received a copy of the GNU Lesser General Public
 16+// License along with this library; if not, write to the Free Software
 17+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 18+
 19+#pragma once
 20+#ifndef __COLORCONV_H
 21+#define __COLORCONV_H
 22+
 23+#ifdef __cplusplus
 24+extern "C" {
 25+#endif
 26+
 27+void rgba8332torgba8888(size_t count, DWORD *dest, WORD *src);
 28+void rgba8888torgba8332(size_t count, WORD *dest, DWORD *src);
 29+void rgb565torgba8888(size_t count, DWORD *dest, WORD *src);
 30+
 31+#ifdef __cplusplus
 32+}
 33+#endif
 34+
 35+#endif //__COLORCONV_H
\ No newline at end of file
Index: ddraw/ddraw.vcxproj
@@ -315,6 +315,7 @@
316316 <None Include="include\d3dvec.inl" />
317317 </ItemGroup>
318318 <ItemGroup>
 319+ <ClInclude Include="colorconv.h" />
319320 <ClInclude Include="common.h" />
320321 <ClInclude Include="const.h" />
321322 <ClInclude Include="ddraw.h" />
@@ -360,6 +361,15 @@
361362 <ClInclude Include="util.h" />
362363 </ItemGroup>
363364 <ItemGroup>
 365+ <ClCompile Include="colorconv.c">
 366+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
 367+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release no DXGL|Win32'">NotUsing</PrecompiledHeader>
 368+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug VS2017|Win32'">NotUsing</PrecompiledHeader>
 369+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug no DXGL|Win32'">NotUsing</PrecompiledHeader>
 370+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
 371+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release VS2017|Win32'">NotUsing</PrecompiledHeader>
 372+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Trace|Win32'">NotUsing</PrecompiledHeader>
 373+ </ClCompile>
364374 <ClCompile Include="const.c">
365375 <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
366376 <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug VS2017|Win32'">NotUsing</PrecompiledHeader>
Index: ddraw/ddraw.vcxproj.filters
@@ -158,6 +158,9 @@
159159 <ClInclude Include="struct_command.h">
160160 <Filter>Header Files</Filter>
161161 </ClInclude>
 162+ <ClInclude Include="colorconv.h">
 163+ <Filter>Header Files</Filter>
 164+ </ClInclude>
162165 </ItemGroup>
163166 <ItemGroup>
164167 <ClCompile Include="ddraw.cpp">
@@ -265,6 +268,9 @@
266269 <ClCompile Include="const.c">
267270 <Filter>Source Files</Filter>
268271 </ClCompile>
 272+ <ClCompile Include="colorconv.c">
 273+ <Filter>Source Files</Filter>
 274+ </ClCompile>
269275 </ItemGroup>
270276 <ItemGroup>
271277 <ResourceCompile Include="ddraw.rc">
Index: ddraw/glTexture.cpp
@@ -135,6 +135,7 @@
136136 if (!newtexture) return DDERR_OUTOFMEMORY;
137137 ZeroMemory(newtexture, sizeof(glTexture));
138138 memcpy(&newtexture->levels[0].ddsd, ddsd, sizeof(DDSURFACEDESC2));
 139+ newtexture->useconv = FALSE;
139140 if (bigwidth)
140141 {
141142 newtexture->bigwidth = bigwidth;
@@ -815,6 +816,8 @@
816817 This->colorbits[3] = 0;
817818 break;
818819 case 7: // 16-bit RGBA8332
 820+ //This->useconv = TRUE;
 821+ //This->convfunction = 0;
819822 FIXME("Unusual texture format RGBA8332 not supported");
820823 This->colororder = 1;
821824 This->colorsizes[0] = 7;
Index: ddraw/struct.h
@@ -311,6 +311,8 @@
312312 GLenum format;
313313 GLenum type;
314314 BOOL zhasstencil;
 315+ BOOL useconv;
 316+ int convfunction;
315317 struct glTexture *palette;
316318 struct glTexture *stencil;
317319 struct glTexture *dummycolor;
Index: dxglcfg/dxgltest.cpp
@@ -223,7 +223,8 @@
224224 {7, 7, 0, 0, TRUE, 60.0, TRUE, TRUE, TRUE, _T("Texture Stage shaders (Interactive, DX7)")},
225225 {7, 7, 0, 0, TRUE, 60.0, TRUE, TRUE, TRUE, _T("Vertex shaders (Interactive, DX7)")},
226226 {1, 7, 0, 1, TRUE, 60.0, FALSE, FALSE, FALSE, _T("SetCursorPos Test")},
227 - {1, 7, 0, 1, TRUE, 60.0, FALSE, FALSE, FALSE, _T("Blt Background, Raster operation Blt sprites")}
 227+ {1, 7, 0, 1, TRUE, 60.0, FALSE, FALSE, FALSE, _T("Blt Background, Raster operation Blt sprites")},
 228+ {7, 7, 1, 1, FALSE, 0.0, TRUE, TRUE, FALSE, _T("Surface/Texture format test")}
228229 };
229230 const int END_TESTS = __LINE__ - 4;
230231 const int numtests = END_TESTS - START_TESTS;
Index: dxglcfg/tests.cpp
@@ -46,7 +46,7 @@
4747 static HWND hWnd;
4848 static int testnum;
4949 static unsigned int randnum;
50 -static int testtypes[] = {0,1,0,1,0,1,0,0,2,1,0,0,0,0,0,0,0,0};
 50+static int testtypes[] = {0,1,0,1,0,1,0,0,-1,1,0,0,0,0,0,0,0,0,2};
5151 static DWORD counter;
5252 static DWORD hotspotx,hotspoty;
5353
@@ -278,7 +278,30 @@
279279 PostQuitMessage(0);
280280 break;
281281 case WM_KEYDOWN:
282 - if(wParam == VK_ESCAPE) DestroyWindow(hWnd);
 282+ if (wParam == VK_ESCAPE)
 283+ {
 284+ DestroyWindow(hWnd);
 285+ break;
 286+ }
 287+ if (testtypes[testnum] == 2)
 288+ {
 289+ if (testnum == 18)
 290+ {
 291+ switch (wParam)
 292+ {
 293+ case VK_SPACE:
 294+ break;
 295+ case VK_UP:
 296+ break;
 297+ case VK_DOWN:
 298+ break;
 299+ case VK_LEFT:
 300+ break;
 301+ case VK_RIGHT:
 302+ break;
 303+ }
 304+ }
 305+ }
283306 break;
284307 case WM_APP:
285308 RunTestTimed(testnum);