22 Sep 2007
This commit is contained in:
parent
8426722712
commit
7443b78bcb
|
@ -6,7 +6,11 @@ SV_MoveBounds SV_TraceBounds
|
||||||
SV_Move SV_Trace
|
SV_Move SV_Trace
|
||||||
SV_ClipMoveToEntity CM_BoxTrace
|
SV_ClipMoveToEntity CM_BoxTrace
|
||||||
SV_ClipToLinks SV_ClipMoveToEntities
|
SV_ClipToLinks SV_ClipMoveToEntities
|
||||||
|
Глобальные задачи:
|
||||||
|
1. Полная отладка приложения в release
|
||||||
|
2. Пофиксить зависание bsplib при работе
|
||||||
|
|
||||||
|
Текущие задачи:
|
||||||
1. Перенести основные части gamed.dll в движок OK
|
1. Перенести основные части gamed.dll в движок OK
|
||||||
2. Попытка полностью отказаться от gamed.dll OK
|
2. Попытка полностью отказаться от gamed.dll OK
|
||||||
3. Перенести физику в движок OK
|
3. Перенести физику в движок OK
|
||||||
|
@ -23,8 +27,7 @@ SV_ClipToLinks SV_ClipMoveToEntities
|
||||||
14. Переименовать renderer.dll в render.dll OK
|
14. Переименовать renderer.dll в render.dll OK
|
||||||
15. Упорядочить файлы и код в common.dll OK
|
15. Упорядочить файлы и код в common.dll OK
|
||||||
16. Пофиксить вылет при загрузке модели игрока в меню
|
16. Пофиксить вылет при загрузке модели игрока в меню
|
||||||
17. Переписать bsplib для работы в цикле
|
17. Полная имплементация PRVM
|
||||||
18. Полная имплементация PRVM
|
|
||||||
{
|
{
|
||||||
перенести параметры из sv_edict_t в sv_fields_t OK
|
перенести параметры из sv_edict_t в sv_fields_t OK
|
||||||
упорядочить FL_ флаги OK
|
упорядочить FL_ флаги OK
|
||||||
|
@ -40,19 +43,26 @@ SV_ClipToLinks SV_ClipMoveToEntities
|
||||||
отладка физики
|
отладка физики
|
||||||
избавиться от папки source2
|
избавиться от папки source2
|
||||||
}
|
}
|
||||||
19. Написать конвертор PCX в TGA OK
|
18. Написать конвертор PCX в TGA OK
|
||||||
20. Пофиксить проигрывание .cin и .pcx файлов
|
19. Пофиксить проигрывание .cin и .pcx файлов
|
||||||
21. overflow message при компилировании в release
|
20. создать отдельный mempool для изображений OK
|
||||||
22. создать отдельный mempool для изображений OK
|
21. разобраться с порядком загрузки сторон кубемапы OK
|
||||||
23. разобраться с порядком загрузки сторон кубемапы
|
22. создать загрузку: *.wal, *.lmp, *.pic OK
|
||||||
24. создать загрузку: *.wal, *.lmp, *.pic OK
|
23. переписать загрузку pcx OK
|
||||||
25. переписать загрузку pcx OK
|
24. Создать error.jpg и встроить в движок OK
|
||||||
|
25. ввести ресэмплинг для dds форматов(тормозит падла)
|
||||||
|
26. исправить загрузку:
|
||||||
|
{
|
||||||
|
-u1555 (грузить при помощи LoadImageRGBA, ввести отдельный тип)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//==================================================
|
//==================================================
|
||||||
// то, что уже готово
|
// то, что уже готово
|
||||||
//==================================================
|
//==================================================
|
||||||
|
+исправлен баг с загрузкой BGRA_32 текстур
|
||||||
|
+добавлено два паттерна для отрисовки сторон кубемапы( выбираются автоматически )
|
||||||
|
+исправлен критичный баг с загрузкой скайбоксов\кубемапов
|
||||||
+Добавлена загрузка lmp и wal
|
+Добавлена загрузка lmp и wal
|
||||||
+при ненайденной стороне кубемапы или скайбокса она заменяется на сгенерированную текстуру
|
+при ненайденной стороне кубемапы или скайбокса она заменяется на сгенерированную текстуру
|
||||||
+xash теперь способен загружать текстуры только с указанным расширением
|
+xash теперь способен загружать текстуры только с указанным расширением
|
||||||
|
|
|
@ -1,73 +0,0 @@
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
<h1>Build Log</h1>
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: common - Win32 Debug--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
Creating temporary file "C:\Temp\RSP13E.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "../public" /I "./bsplib/" /I "./qcclib" /I "./common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\common\!debug/" /Fo"..\temp\common\!debug/" /Fd"..\temp\common\!debug/" /FD /GZ /c
|
|
||||||
"D:\XASH3D\src_main\!source\common\common\image.c"
|
|
||||||
]
|
|
||||||
Creating command line "cl.exe @C:\Temp\RSP13E.tmp"
|
|
||||||
Creating temporary file "C:\Temp\RSP13F.tmp" with contents
|
|
||||||
[
|
|
||||||
msvcrt.lib winmm.lib user32.lib /nologo /dll /incremental:yes /pdb:"..\temp\common\!debug/common.pdb" /debug /machine:I386 /nodefaultlib:"msvcrtd.lib" /out:"..\temp\common\!debug/common.dll" /implib:"..\temp\common\!debug/common.lib" /pdbtype:sept
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\brushbsp.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\bspfile.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\csg.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\faces.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\filesystem.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\flow.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\image.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\imglib.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\leakfile.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\lightmap.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\map.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\memory.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\patches.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\platform.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\portals.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\pr_comp.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\pr_lex.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\prtfile.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\qbsp3.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\qcc_utils.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\qccmain.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\qrad3.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\qvis3.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\shaders.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\spritegen.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\studio.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\studio_utils.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\textures.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\trace.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\tree.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\utils.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\winding.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\writebsp.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\common\!debug\ziplib.obj"
|
|
||||||
]
|
|
||||||
Creating command line "link.exe @C:\Temp\RSP13F.tmp"
|
|
||||||
Creating temporary file "C:\Temp\RSP140.bat" with contents
|
|
||||||
[
|
|
||||||
@echo off
|
|
||||||
copy \XASH3D\src_main\!source\temp\common\!debug\common.dll "D:\Xash3D\bin\common.dll"
|
|
||||||
]
|
|
||||||
Creating command line "C:\Temp\RSP140.bat"
|
|
||||||
Compiling...
|
|
||||||
image.c
|
|
||||||
Linking...
|
|
||||||
<h3>Output Window</h3>
|
|
||||||
Performing Custom Build Step on \XASH3D\src_main\!source\temp\common\!debug\common.dll
|
|
||||||
‘ª®¯¨à®¢ ® ä ©«®¢: 1.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
|
||||||
common.dll - 0 error(s), 0 warning(s)
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
//=======================================================================
|
||||||
|
// Copyright XashXT Group 2007 ゥ
|
||||||
|
// archive.h - store various images
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
#ifndef ARCHIVE_H
|
||||||
|
#define ARCHIVE_H
|
||||||
|
|
||||||
|
const byte florr1_2_jpg[] = // quake2 florr1_2.wal image
|
||||||
|
{
|
||||||
|
0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00,
|
||||||
|
0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xff, 0xdb,
|
||||||
|
0x00, 0x43, 0x00, 0x0a, 0x07, 0x07, 0x08, 0x07, 0x06, 0x0a, 0x08,
|
||||||
|
0x08, 0x08, 0x0b, 0x0a, 0x0a, 0x0b, 0x0e, 0x18, 0x10, 0x0e, 0x0d,
|
||||||
|
0x0d, 0x0e, 0x1d, 0x15, 0x16, 0x11, 0x18, 0x23, 0x1f, 0x25, 0x24,
|
||||||
|
0x22, 0x1f, 0x22, 0x21, 0x26, 0x2b, 0x37, 0x2f, 0x26, 0x29, 0x34,
|
||||||
|
0x29, 0x21, 0x22, 0x30, 0x41, 0x31, 0x34, 0x39, 0x3b, 0x3e, 0x3e,
|
||||||
|
0x3e, 0x25, 0x2e, 0x44, 0x49, 0x43, 0x3c, 0x48, 0x37, 0x3d, 0x3e,
|
||||||
|
0x3b, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x0a, 0x0b, 0x0b, 0x0e, 0x0d,
|
||||||
|
0x0e, 0x1c, 0x10, 0x10, 0x1c, 0x3b, 0x28, 0x22, 0x28, 0x3b, 0x3b,
|
||||||
|
0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
|
||||||
|
0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
|
||||||
|
0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
|
||||||
|
0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
|
||||||
|
0x3b, 0x3b, 0x3b, 0x3b, 0xff, 0xc0, 0x00, 0x11, 0x08, 0x00, 0x40,
|
||||||
|
0x00, 0x40, 0x03, 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11,
|
||||||
|
0x01, 0xff, 0xc4, 0x00, 0x17, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x00, 0x02, 0x07, 0xff, 0xc4, 0x00, 0x25, 0x10, 0x00, 0x02,
|
||||||
|
0x02, 0x02, 0x01, 0x03, 0x05, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x01, 0x11, 0x00, 0x21, 0x31, 0x41, 0x51, 0x02,
|
||||||
|
0x61, 0x81, 0x12, 0x22, 0x42, 0x71, 0xc1, 0x32, 0x91, 0xb1, 0xff,
|
||||||
|
0xc4, 0x00, 0x16, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
|
||||||
|
0x02, 0xff, 0xc4, 0x00, 0x1b, 0x11, 0x01, 0x00, 0x02, 0x03, 0x01,
|
||||||
|
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x01, 0x21, 0x11, 0x31, 0x41, 0x61, 0x71, 0xff, 0xda, 0x00,
|
||||||
|
0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00,
|
||||||
|
0xe7, 0x43, 0x18, 0xf2, 0x26, 0x22, 0x29, 0xb9, 0x9b, 0x43, 0x1d,
|
||||||
|
0xde, 0x4c, 0xab, 0x82, 0xfa, 0x93, 0xc9, 0xd6, 0xa3, 0xb5, 0xa0,
|
||||||
|
0xfb, 0xad, 0xb8, 0x41, 0x91, 0x68, 0xd4, 0x0b, 0x41, 0x0e, 0x98,
|
||||||
|
0xc0, 0x95, 0xe9, 0xf7, 0x32, 0x63, 0xd1, 0xc0, 0xb6, 0x3c, 0xcb,
|
||||||
|
0xa0, 0x92, 0x36, 0x05, 0xf0, 0x21, 0x4d, 0x5a, 0x5a, 0x22, 0x84,
|
||||||
|
0xbc, 0x4c, 0x9c, 0x31, 0x0c, 0x9c, 0x13, 0x80, 0x52, 0x8e, 0x29,
|
||||||
|
0x9e, 0xa4, 0x05, 0x83, 0x8c, 0x39, 0x46, 0x22, 0xcc, 0xe6, 0x4f,
|
||||||
|
0xc8, 0x5d, 0xef, 0xb4, 0x66, 0x04, 0x4a, 0xb6, 0x20, 0x90, 0x25,
|
||||||
|
0xa7, 0x1f, 0x17, 0xa0, 0xe4, 0x2c, 0xfd, 0x66, 0x1f, 0x09, 0x55,
|
||||||
|
0x79, 0x3c, 0x66, 0x3b, 0x8c, 0x8d, 0x52, 0x40, 0x87, 0xb2, 0x25,
|
||||||
|
0x16, 0xb4, 0x0b, 0x59, 0x96, 0x73, 0xb5, 0xa6, 0xac, 0x12, 0x09,
|
||||||
|
0xf3, 0x2e, 0xd2, 0xe5, 0xb2, 0x70, 0xc1, 0x27, 0xf6, 0x08, 0x80,
|
||||||
|
0xec, 0x15, 0xa8, 0xf2, 0x97, 0x6d, 0x04, 0x4e, 0x6b, 0x89, 0x52,
|
||||||
|
0xb6, 0x6d, 0x1a, 0x99, 0x69, 0xa0, 0x87, 0x4c, 0x60, 0x4a, 0xf4,
|
||||||
|
0xfb, 0x99, 0x31, 0xe8, 0xe0, 0x5b, 0x1e, 0x65, 0xd0, 0x49, 0x23,
|
||||||
|
0xab, 0x5f, 0x70, 0xd1, 0xdb, 0x35, 0xfd, 0xc9, 0x12, 0x91, 0xba,
|
||||||
|
0x3a, 0x12, 0xc9, 0xc1, 0x26, 0xd2, 0x1c, 0x44, 0x04, 0x05, 0x83,
|
||||||
|
0x8c, 0x38, 0x46, 0x22, 0xcc, 0xe6, 0x4f, 0xc8, 0x5d, 0xef, 0xb4,
|
||||||
|
0x66, 0x04, 0x4a, 0xb6, 0x20, 0x90, 0x25, 0xa7, 0x1f, 0x17, 0xa8,
|
||||||
|
0xb6, 0xf7, 0xfe, 0xcb, 0x52, 0xb6, 0x86, 0x31, 0xe4, 0x42, 0x22,
|
||||||
|
0x8c, 0xcd, 0xa1, 0xfc, 0x68, 0x5b, 0xb2, 0x65, 0x5c, 0x17, 0xd4,
|
||||||
|
0x9e, 0x4e, 0xb5, 0x1d, 0xad, 0x1b, 0x04, 0x82, 0x7c, 0xcb, 0xb4,
|
||||||
|
0xb9, 0x6c, 0x9c, 0x30, 0x49, 0xfd, 0x82, 0x20, 0x3b, 0x05, 0x6a,
|
||||||
|
0x3c, 0xa5, 0xdb, 0x41, 0x13, 0x9a, 0xe2, 0x54, 0xac, 0x36, 0x8b,
|
||||||
|
0xbe, 0x25, 0x2a, 0x09, 0x23, 0x60, 0x5f, 0x02, 0x14, 0x6d, 0x2d,
|
||||||
|
0x11, 0x42, 0x5e, 0x26, 0x4e, 0x18, 0x86, 0x4e, 0x1a, 0x24, 0x8e,
|
||||||
|
0xad, 0x7d, 0xc7, 0x4c, 0xed, 0x91, 0xdc, 0x67, 0x99, 0x44, 0x19,
|
||||||
|
0x93, 0xea, 0xae, 0x6e, 0x49, 0x5b, 0xfc, 0x87, 0x6d, 0x70, 0x94,
|
||||||
|
0xef, 0xb4, 0x67, 0x6b, 0x80, 0xe4, 0x2c, 0xfd, 0x66, 0x5f, 0x11,
|
||||||
|
0x55, 0x79, 0x3c, 0x66, 0x3b, 0x8c, 0x8d, 0x52, 0x40, 0x87, 0xb2,
|
||||||
|
0x25, 0x16, 0xb4, 0x8a, 0x77, 0xda, 0x13, 0xb3, 0xc4, 0x50, 0xd5,
|
||||||
|
0x76, 0x94, 0xec, 0x46, 0x93, 0x42, 0x8a, 0xbd, 0xc9, 0x23, 0x56,
|
||||||
|
0x01, 0x7c, 0x99, 0x10, 0x6c, 0xbc, 0x99, 0x67, 0x2b, 0x18, 0x16,
|
||||||
|
0x8d, 0x40, 0xb5, 0x43, 0xa5, 0xf6, 0x8c, 0x09, 0x5e, 0x9f, 0x73,
|
||||||
|
0x26, 0x3d, 0x1c, 0x7f, 0xff, 0xd9 };
|
||||||
|
|
||||||
|
#endif//ARCHIVE_H
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "archive.h"
|
||||||
|
|
||||||
//global image variables
|
//global image variables
|
||||||
int image_width, image_height;
|
int image_width, image_height;
|
||||||
|
@ -24,7 +25,8 @@ byte *image_rgba; // image pointer (see image_type for details)
|
||||||
int cubemap_width, cubemap_height;
|
int cubemap_width, cubemap_height;
|
||||||
int cubemap_num_sides; // how mach sides is loaded
|
int cubemap_num_sides; // how mach sides is loaded
|
||||||
byte *image_cubemap; // cubemap pack
|
byte *image_cubemap; // cubemap pack
|
||||||
|
uint cubemap_image_type; // shared image type
|
||||||
|
char *suf[6] = {"ft", "bk", "rt", "lf", "up", "dn"};
|
||||||
|
|
||||||
bool ImageValidSize( char *name )
|
bool ImageValidSize( char *name )
|
||||||
{
|
{
|
||||||
|
@ -345,28 +347,15 @@ bool LoadPCX( char *name, char *buffer, int filesize )
|
||||||
for (i = 0; i < s; i++)
|
for (i = 0; i < s; i++)
|
||||||
{
|
{
|
||||||
p = pbuf[i];
|
p = pbuf[i];
|
||||||
trans[i] = d_currentpal[p];
|
|
||||||
|
|
||||||
if (p == 255)
|
if (p == 255)
|
||||||
{
|
{
|
||||||
image_flags |= IMAGE_HAS_ALPHA; // found alpha channel
|
image_flags |= IMAGE_HAS_ALPHA; // found alpha channel
|
||||||
|
((byte *)&trans[i])[0] = ((byte *)&d_currentpal[0])[0];
|
||||||
// transparent, so scan around for another color
|
((byte *)&trans[i])[1] = ((byte *)&d_currentpal[0])[1];
|
||||||
// to avoid alpha fringes
|
((byte *)&trans[i])[2] = ((byte *)&d_currentpal[0])[2];
|
||||||
// FIXME: do a full flood fill so mips work...
|
((byte *)&trans[i])[3] = ((byte *)&d_currentpal[p])[3];
|
||||||
if (i > image_width && pbuf[i - image_width] != 255)
|
|
||||||
p = pbuf[i - image_width];
|
|
||||||
else if (i < s - image_width && pbuf[i + image_width] != 255)
|
|
||||||
p = pbuf[i + image_width];
|
|
||||||
else if (i > 0 && pbuf[i-1] != 255) p = pbuf[i-1];
|
|
||||||
else if (i < s-1 && pbuf[i+1] != 255) p = pbuf[i+1];
|
|
||||||
else p = 0;
|
|
||||||
|
|
||||||
// copy rgba components
|
|
||||||
((byte *)&trans[i])[0] = ((byte *)&d_currentpal[p])[0];
|
|
||||||
((byte *)&trans[i])[1] = ((byte *)&d_currentpal[p])[1];
|
|
||||||
((byte *)&trans[i])[2] = ((byte *)&d_currentpal[p])[2];
|
|
||||||
}
|
}
|
||||||
|
else trans[i] = d_currentpal[p];
|
||||||
}
|
}
|
||||||
|
|
||||||
Free( pbuf ); // free compressed image
|
Free( pbuf ); // free compressed image
|
||||||
|
@ -745,10 +734,10 @@ uint dds_get_linear_size( int width, int height, int depth, int rgbcount )
|
||||||
// right calcualte blocksize
|
// right calcualte blocksize
|
||||||
for(i = 0; i < PF_TOTALCOUNT; i++)
|
for(i = 0; i < PF_TOTALCOUNT; i++)
|
||||||
{
|
{
|
||||||
if(image_type == PixelFormatDescription[i].format)
|
if(image_type == PFDesc[i].format)
|
||||||
{
|
{
|
||||||
block = PixelFormatDescription[i].block;
|
block = PFDesc[i].block;
|
||||||
bpp = PixelFormatDescription[i].bpp;
|
bpp = PFDesc[i].bpp;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -813,9 +802,9 @@ void dds_get_pixelformat( dds_t *hdr )
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup additional flags
|
// setup additional flags
|
||||||
if( hdr->dsCaps.dwCaps1 & DDS_COMPLEX )
|
if( hdr->dsCaps.dwCaps1 & DDS_COMPLEX && hdr->dsCaps.dwCaps2 & DDS_CUBEMAP)
|
||||||
{
|
{
|
||||||
image_flags |= (hdr->dsCaps.dwCaps2 & DDS_CUBEMAP) ? IMAGE_CUBEMAP : 0;
|
image_flags |= IMAGE_CUBEMAP | IMAGE_CUBEMAP_FLIP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hdr->dsPixelFormat.dwFlags & DDS_ALPHAPIXELS)
|
if(hdr->dsPixelFormat.dwFlags & DDS_ALPHAPIXELS)
|
||||||
|
@ -1476,15 +1465,14 @@ bool LoadJPG(char *name, char *buffer, int filesize )
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct imageformat_s
|
typedef struct loadformat_s
|
||||||
{
|
{
|
||||||
char *formatstring;
|
char *formatstring;
|
||||||
char *ext;
|
char *ext;
|
||||||
bool (*loadfunc)(char *name, char *buffer, int filesize);
|
bool (*loadfunc)(char *name, char *buffer, int filesize);
|
||||||
}
|
} loadformat_t;
|
||||||
imageformat_t;
|
|
||||||
|
|
||||||
imageformat_t image_formats[] =
|
loadformat_t load_formats[] =
|
||||||
{
|
{
|
||||||
{"textures/%s%s.%s", "dds", LoadDDS},
|
{"textures/%s%s.%s", "dds", LoadDDS},
|
||||||
{"textures/%s%s.%s", "tga", LoadTGA},
|
{"textures/%s%s.%s", "tga", LoadTGA},
|
||||||
|
@ -1508,7 +1496,7 @@ rgbdata_t *ImagePack( void )
|
||||||
rgbdata_t *pack = Mem_Alloc( imagepool, sizeof(rgbdata_t));
|
rgbdata_t *pack = Mem_Alloc( imagepool, sizeof(rgbdata_t));
|
||||||
|
|
||||||
if(image_cubemap && cubemap_num_sides != 6) // this neved be happens, just in case
|
if(image_cubemap && cubemap_num_sides != 6) // this neved be happens, just in case
|
||||||
Sys_Error("ImagePack: inconsistent cubemap pack\n" );
|
Sys_Error("ImagePack: inconsistent cubemap pack %d\n", cubemap_num_sides );
|
||||||
|
|
||||||
if(image_cubemap)
|
if(image_cubemap)
|
||||||
{
|
{
|
||||||
|
@ -1516,31 +1504,40 @@ rgbdata_t *ImagePack( void )
|
||||||
pack->buffer = image_cubemap;
|
pack->buffer = image_cubemap;
|
||||||
pack->width = cubemap_width;
|
pack->width = cubemap_width;
|
||||||
pack->height = cubemap_height;
|
pack->height = cubemap_height;
|
||||||
|
pack->type = cubemap_image_type;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pack->buffer = image_rgba;
|
pack->buffer = image_rgba;
|
||||||
pack->width = image_width;
|
pack->width = image_width;
|
||||||
pack->height = image_height;
|
pack->height = image_height;
|
||||||
|
pack->type = image_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
pack->numLayers = image_num_layers;
|
pack->numLayers = image_num_layers;
|
||||||
pack->numMips = image_num_mips;
|
pack->numMips = image_num_mips;
|
||||||
pack->bitsCount = image_bits_count;
|
pack->bitsCount = image_bits_count;
|
||||||
pack->type = image_type;
|
|
||||||
pack->flags = image_flags;
|
pack->flags = image_flags;
|
||||||
pack->palette = image_palette;
|
pack->palette = image_palette;
|
||||||
|
|
||||||
return pack;
|
return pack;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FS_AddImageToPack( const char *name )
|
bool FS_AddImageToPack( const char *name )
|
||||||
{
|
{
|
||||||
byte *resampled;
|
byte *resampled;
|
||||||
|
|
||||||
// first image have suffix "ft" and set average size for all cubemap sides!
|
// first image have suffix "ft" and set average size for all cubemap sides!
|
||||||
if(!image_cubemap){ cubemap_width = image_width, cubemap_height = image_height; }
|
if(!image_cubemap)
|
||||||
|
{
|
||||||
|
cubemap_width = image_width;
|
||||||
|
cubemap_height = image_height;
|
||||||
|
cubemap_image_type = image_type;
|
||||||
|
}
|
||||||
image_size = cubemap_width * cubemap_height * 4; // keep constant size, render.dll expecting it
|
image_size = cubemap_width * cubemap_height * 4; // keep constant size, render.dll expecting it
|
||||||
|
|
||||||
|
// mixing dds format with any existing ?
|
||||||
|
if(image_type != cubemap_image_type) return false;
|
||||||
|
|
||||||
// resampling image if needed
|
// resampling image if needed
|
||||||
resampled = Image_Resample((uint *)image_rgba, image_width, image_height, cubemap_width, cubemap_height);
|
resampled = Image_Resample((uint *)image_rgba, image_width, image_height, cubemap_width, cubemap_height);
|
||||||
|
@ -1556,6 +1553,8 @@ void FS_AddImageToPack( const char *name )
|
||||||
Free( image_rgba ); // memmove aren't help us
|
Free( image_rgba ); // memmove aren't help us
|
||||||
image_ptr += image_size; // move to next
|
image_ptr += image_size; // move to next
|
||||||
cubemap_num_sides++; // sides counter
|
cubemap_num_sides++; // sides counter
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1567,14 +1566,16 @@ loading and unpack to rgba any known image
|
||||||
*/
|
*/
|
||||||
rgbdata_t *FS_LoadImage(const char *filename, char *buffer, int buffsize )
|
rgbdata_t *FS_LoadImage(const char *filename, char *buffer, int buffsize )
|
||||||
{
|
{
|
||||||
imageformat_t *format;
|
loadformat_t *format;
|
||||||
const char *ext = FS_FileExtension( filename );
|
const char *ext = FS_FileExtension( filename );
|
||||||
char path[128], loadname[128], texname[128];
|
char path[128], loadname[128], texname[128];
|
||||||
bool anyformat = !stricmp(ext, "") ? true : false;
|
bool anyformat = !stricmp(ext, "") ? true : false;
|
||||||
char *suf[6] = {"ft", "bk", "rt", "lf", "up", "dn"};
|
|
||||||
int i, filesize = 0;
|
int i, filesize = 0;
|
||||||
byte *f;
|
byte *f;
|
||||||
|
|
||||||
|
#if 0 // don't try to be very clever
|
||||||
|
if(!buffer || !buffsize) buffer = (char *)florr1_2_jpg, buffsize = sizeof(florr1_2_jpg);
|
||||||
|
#endif
|
||||||
strncpy( loadname, filename, sizeof(loadname)-1);
|
strncpy( loadname, filename, sizeof(loadname)-1);
|
||||||
FS_StripExtension( loadname ); //remove extension if needed
|
FS_StripExtension( loadname ); //remove extension if needed
|
||||||
|
|
||||||
|
@ -1582,7 +1583,7 @@ rgbdata_t *FS_LoadImage(const char *filename, char *buffer, int buffsize )
|
||||||
if(!anyformat) MsgWarn( "Warning: %s will be loading only with ext .%s\n", loadname, ext );
|
if(!anyformat) MsgWarn( "Warning: %s will be loading only with ext .%s\n", loadname, ext );
|
||||||
|
|
||||||
// now try all the formats in the selected list
|
// now try all the formats in the selected list
|
||||||
for (format = image_formats; format->formatstring; format++)
|
for (format = load_formats; format->formatstring; format++)
|
||||||
{
|
{
|
||||||
if(anyformat || !stricmp(ext, format->ext ))
|
if(anyformat || !stricmp(ext, format->ext ))
|
||||||
{
|
{
|
||||||
|
@ -1601,7 +1602,7 @@ rgbdata_t *FS_LoadImage(const char *filename, char *buffer, int buffsize )
|
||||||
// maybe it skybox or cubemap ?
|
// maybe it skybox or cubemap ?
|
||||||
for(i = 0; i < 6; i++)
|
for(i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
for (format = image_formats; format->formatstring; format++)
|
for (format = load_formats; format->formatstring; format++)
|
||||||
{
|
{
|
||||||
if(anyformat || !stricmp(ext, format->ext ))
|
if(anyformat || !stricmp(ext, format->ext ))
|
||||||
{
|
{
|
||||||
|
@ -1612,24 +1613,24 @@ rgbdata_t *FS_LoadImage(const char *filename, char *buffer, int buffsize )
|
||||||
// this name will be used only for tell user about problems
|
// this name will be used only for tell user about problems
|
||||||
FS_FileBase( path, texname );
|
FS_FileBase( path, texname );
|
||||||
if( format->loadfunc(texname, f, filesize ))
|
if( format->loadfunc(texname, f, filesize ))
|
||||||
FS_AddImageToPack(va("%s%s.%s", loadname, suf[i], format->ext));
|
{
|
||||||
|
if(FS_AddImageToPack(va("%s%s.%s", loadname, suf[i], format->ext)))
|
||||||
|
break; // loaded
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(cubemap_num_sides != i + 1) //check side
|
if(cubemap_num_sides != i + 1) //check side
|
||||||
{
|
{
|
||||||
if(!image_cubemap) // first side not found
|
// first side not found, probably it's not cubemap
|
||||||
{
|
// it contain info about image_type and dimensions, don't generate black cubemaps
|
||||||
// set default dimensions
|
if(!image_cubemap) break;
|
||||||
cubemap_width = cubemap_height = 256;
|
|
||||||
image_size = cubemap_width * cubemap_height * 4;
|
|
||||||
}
|
|
||||||
MsgDev(D_LOAD, "FS_LoadImage: couldn't load (%s%s.%s), create balck image\n",loadname,suf[i],ext );
|
MsgDev(D_LOAD, "FS_LoadImage: couldn't load (%s%s.%s), create balck image\n",loadname,suf[i],ext );
|
||||||
|
|
||||||
// Mem_Alloc already filled memblock with 0x00, no need to do it again
|
// Mem_Alloc already filled memblock with 0x00, no need to do it again
|
||||||
image_cubemap = Mem_Realloc( imagepool, image_cubemap, image_ptr + image_size );
|
image_cubemap = Mem_Realloc( imagepool, image_cubemap, image_ptr + image_size );
|
||||||
image_ptr += image_size; // move to next
|
image_ptr += image_size; // move to next
|
||||||
cubemap_num_sides++; // merge counter
|
cubemap_num_sides++; // merge counter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1638,7 +1639,7 @@ rgbdata_t *FS_LoadImage(const char *filename, char *buffer, int buffsize )
|
||||||
// try to load image from const buffer (e.g. const byte blank_frame )
|
// try to load image from const buffer (e.g. const byte blank_frame )
|
||||||
strncpy( texname, filename, sizeof(texname) - 1);
|
strncpy( texname, filename, sizeof(texname) - 1);
|
||||||
|
|
||||||
for (format = image_formats; format->formatstring; format++)
|
for (format = load_formats; format->formatstring; format++)
|
||||||
{
|
{
|
||||||
if(anyformat || !stricmp(ext, format->ext ))
|
if(anyformat || !stricmp(ext, format->ext ))
|
||||||
{
|
{
|
||||||
|
@ -1687,6 +1688,80 @@ void FS_FreeImage( rgbdata_t *pack )
|
||||||
image_size = 0;
|
image_size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=============
|
||||||
|
SaveTGA
|
||||||
|
=============
|
||||||
|
*/
|
||||||
|
bool SaveTGA( const char *filename, byte *data, int width, int height, bool alpha, int imagetype )
|
||||||
|
{
|
||||||
|
int y, outsize, pixel_size;
|
||||||
|
const byte *bufend, *in;
|
||||||
|
byte *buffer, *out;
|
||||||
|
const char *comment = "Generated by Xash ImageLib\0";
|
||||||
|
|
||||||
|
if(alpha) outsize = width * height * 4 + 18 + strlen(comment);
|
||||||
|
else outsize = width * height * 3 + 18 + strlen(comment);
|
||||||
|
|
||||||
|
buffer = (byte *)Z_Malloc( outsize );
|
||||||
|
memset (buffer, 0, 18);
|
||||||
|
|
||||||
|
// prepare header
|
||||||
|
buffer[0] = strlen(comment); // tga comment length
|
||||||
|
buffer[2] = 2; // uncompressed type
|
||||||
|
buffer[12] = (width >> 0) & 0xFF;
|
||||||
|
buffer[13] = (width >> 8) & 0xFF;
|
||||||
|
buffer[14] = (height >> 0) & 0xFF;
|
||||||
|
buffer[15] = (height >> 8) & 0xFF;
|
||||||
|
buffer[16] = alpha ? 32 : 24;
|
||||||
|
buffer[17] = alpha ? 8 : 0; // 8 bits of alpha
|
||||||
|
strncpy(buffer + 18, comment, strlen(comment));
|
||||||
|
out = buffer + 18 + strlen(comment);
|
||||||
|
|
||||||
|
// get image description
|
||||||
|
switch( image_type )
|
||||||
|
{
|
||||||
|
case PF_RGB_24: pixel_size = 3; break;
|
||||||
|
case PF_RGBA_32: pixel_size = 4; break;
|
||||||
|
default:
|
||||||
|
MsgWarn("SaveTGA: unsupported image type %s\n", PFDesc[image_type - 1].name );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// swap rgba to bgra and flip upside down
|
||||||
|
for (y = height - 1; y >= 0; y--)
|
||||||
|
{
|
||||||
|
in = data + y * width * pixel_size;
|
||||||
|
bufend = in + width * pixel_size;
|
||||||
|
for ( ;in < bufend; in += pixel_size)
|
||||||
|
{
|
||||||
|
*out++ = in[2];
|
||||||
|
*out++ = in[1];
|
||||||
|
*out++ = in[0];
|
||||||
|
if(alpha) *out++ = in[3];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Msg("Writing %s[%d]\n", filename, alpha ? 32 : 24 );
|
||||||
|
FS_WriteFile (filename, buffer, outsize );
|
||||||
|
|
||||||
|
Free( buffer );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct saveformat_s
|
||||||
|
{
|
||||||
|
char *formatstring;
|
||||||
|
char *ext;
|
||||||
|
bool (*savefunc)(char *filename, byte *data, int width, int height, bool alpha, int imagetype );
|
||||||
|
} saveformat_t;
|
||||||
|
|
||||||
|
saveformat_t save_formats[] =
|
||||||
|
{
|
||||||
|
{"%s%s.%s", "tga", SaveTGA},
|
||||||
|
{NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
FS_SaveImage
|
FS_SaveImage
|
||||||
|
@ -1696,61 +1771,26 @@ writes image as tga RGBA format
|
||||||
*/
|
*/
|
||||||
void FS_SaveImage(const char *filename, rgbdata_t *pix )
|
void FS_SaveImage(const char *filename, rgbdata_t *pix )
|
||||||
{
|
{
|
||||||
int y, width, height;
|
|
||||||
byte *buffer, *out;
|
|
||||||
const byte *in, *end, *data;
|
|
||||||
int pixel_size, outsize;
|
|
||||||
bool has_alpha = false;
|
bool has_alpha = false;
|
||||||
|
int i, numsides = 1;
|
||||||
|
byte *data;
|
||||||
|
char savename[256];
|
||||||
|
|
||||||
if(!pix || !pix->buffer) return;
|
if(!pix || !pix->buffer) return;
|
||||||
|
|
||||||
width = pix->width;
|
|
||||||
height = pix->height;
|
|
||||||
data = pix->buffer;
|
data = pix->buffer;
|
||||||
|
FS_StripExtension( (char *)filename );
|
||||||
|
if(pix->flags & IMAGE_HAS_ALPHA) has_alpha = true;
|
||||||
|
if(pix->flags & IMAGE_CUBEMAP) numsides = 6;
|
||||||
|
|
||||||
// detect input parms
|
for(i = 0; i < numsides; i++)
|
||||||
if(pix->type == PF_RGB_24) pixel_size = 3;
|
|
||||||
else if (pix->type == PF_RGBA_32) pixel_size = 4;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
MsgWarn("FS_SaveImage: %s have unsupported type for write, ignored\n", filename );
|
if(numsides > 1) sprintf(savename, "%s%s.tga", filename, suf[i] );
|
||||||
return;
|
else sprintf(savename, "%s.tga", filename );
|
||||||
|
|
||||||
|
SaveTGA( savename, data, pix->width, pix->height, has_alpha, pix->type );
|
||||||
|
data += pix->width * pix->height * PFDesc[pix->type - 1].bpp;
|
||||||
}
|
}
|
||||||
if(pix->flags & IMAGE_HAS_ALPHA)
|
|
||||||
has_alpha = true;
|
|
||||||
|
|
||||||
if(has_alpha) outsize = width * height * 4 + 18;
|
|
||||||
else outsize = width * height * 3 + 18;
|
|
||||||
|
|
||||||
buffer = (byte *)Z_Malloc( outsize );
|
|
||||||
memset (buffer, 0, 18);
|
|
||||||
|
|
||||||
buffer[2] = 2; // uncompressed type
|
|
||||||
buffer[12] = (width >> 0) & 0xFF;
|
|
||||||
buffer[13] = (width >> 8) & 0xFF;
|
|
||||||
buffer[14] = (height >> 0) & 0xFF;
|
|
||||||
buffer[15] = (height >> 8) & 0xFF;
|
|
||||||
buffer[16] = has_alpha ? 32 : 24;
|
|
||||||
buffer[17] = has_alpha ? 8 : 0; // 8 bits of alpha
|
|
||||||
out = buffer + 18;
|
|
||||||
|
|
||||||
// swap rgba to bgra and flip upside down
|
|
||||||
for (y = height - 1; y >= 0; y--)
|
|
||||||
{
|
|
||||||
in = data + y * width * pixel_size;
|
|
||||||
end = in + width * pixel_size;
|
|
||||||
for ( ;in < end; in += pixel_size)
|
|
||||||
{
|
|
||||||
*out++ = in[2];
|
|
||||||
*out++ = in[1];
|
|
||||||
*out++ = in[0];
|
|
||||||
if(has_alpha)
|
|
||||||
*out++ = in[3];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Msg("Writing %s[%d]\n", filename, has_alpha ? 32 : 24 );
|
|
||||||
FS_WriteFile (filename, buffer, outsize );
|
|
||||||
Free( buffer );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FS_InitImagelib( void )
|
void FS_InitImagelib( void )
|
||||||
|
|
|
@ -94,7 +94,7 @@ typedef struct lmp_s
|
||||||
|
|
||||||
========================================================================
|
========================================================================
|
||||||
*/
|
*/
|
||||||
typedef struct
|
typedef struct tga_s
|
||||||
{
|
{
|
||||||
byte id_length;
|
byte id_length;
|
||||||
byte colormap_type;
|
byte colormap_type;
|
||||||
|
|
|
@ -110,6 +110,7 @@ void Image_GetPalettePCX( byte *pal )
|
||||||
if(pal)
|
if(pal)
|
||||||
{
|
{
|
||||||
Image_GetPalette( pal, d_8to24table );
|
Image_GetPalette( pal, d_8to24table );
|
||||||
|
d_8to24table[255] &= LittleLong(0xffffff);
|
||||||
d_currentpal = d_8to24table;
|
d_currentpal = d_8to24table;
|
||||||
}
|
}
|
||||||
else Image_GetQ2Palette();
|
else Image_GetQ2Palette();
|
||||||
|
@ -190,7 +191,6 @@ byte *Image_Resample(uint *in, int inwidth, int inheight, int outwidth, int outh
|
||||||
|
|
||||||
//check for buffers
|
//check for buffers
|
||||||
if(!in) return NULL;
|
if(!in) return NULL;
|
||||||
|
|
||||||
// nothing to resample ?
|
// nothing to resample ?
|
||||||
if (inwidth == outwidth && inheight == outheight)
|
if (inwidth == outwidth && inheight == outheight)
|
||||||
return (byte *)in;
|
return (byte *)in;
|
||||||
|
|
|
@ -55,5 +55,5 @@ if exist server.dat move server.dat D:\Xash3D\xash\server.dat
|
||||||
echo Build succeeded!
|
echo Build succeeded!
|
||||||
echo Please wait. Xash is now loading
|
echo Please wait. Xash is now loading
|
||||||
cd D:\Xash3D\
|
cd D:\Xash3D\
|
||||||
xash.exe +map skytest -log -debug -dev 1
|
xash.exe +map skytest -log -debug -dev 4
|
||||||
:done
|
:done
|
|
@ -1,43 +0,0 @@
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<pre>
|
|
||||||
<h1>Build Log</h1>
|
|
||||||
<h3>
|
|
||||||
--------------------Configuration: launch - Win32 Debug--------------------
|
|
||||||
</h3>
|
|
||||||
<h3>Command Lines</h3>
|
|
||||||
Creating temporary file "C:\Temp\RSP119.tmp" with contents
|
|
||||||
[
|
|
||||||
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "../public" /I "../platform/formats" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\launch\!debug/" /Fo"..\temp\launch\!debug/" /Fd"..\temp\launch\!debug/" /FD /GZ /c
|
|
||||||
"D:\XASH3D\src_main\!source\launch\launcher.c"
|
|
||||||
]
|
|
||||||
Creating command line "cl.exe @C:\Temp\RSP119.tmp"
|
|
||||||
Creating temporary file "C:\Temp\RSP11A.tmp" with contents
|
|
||||||
[
|
|
||||||
msvcrt.lib user32.lib gdi32.lib advapi32.lib /nologo /dll /incremental:yes /pdb:"..\temp\launch\!debug/launch.pdb" /debug /machine:I386 /nodefaultlib:"msvcrtd.lib" /out:"..\temp\launch\!debug/launch.dll" /implib:"..\temp\launch\!debug/launch.lib" /pdbtype:sept
|
|
||||||
"\XASH3D\src_main\!source\temp\launch\!debug\console.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\launch\!debug\launcher.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\launch\!debug\stdlib.obj"
|
|
||||||
"\XASH3D\src_main\!source\temp\launch\!debug\utils.obj"
|
|
||||||
]
|
|
||||||
Creating command line "link.exe @C:\Temp\RSP11A.tmp"
|
|
||||||
Creating temporary file "C:\Temp\RSP11B.bat" with contents
|
|
||||||
[
|
|
||||||
@echo off
|
|
||||||
copy \XASH3D\src_main\!source\temp\launch\!debug\launch.dll "D:\Xash3D\bin\launch.dll"
|
|
||||||
]
|
|
||||||
Creating command line "C:\Temp\RSP11B.bat"
|
|
||||||
Compiling...
|
|
||||||
launcher.c
|
|
||||||
Linking...
|
|
||||||
<h3>Output Window</h3>
|
|
||||||
Performing Custom Build Step on \XASH3D\src_main\!source\temp\launch\!debug\launch.dll
|
|
||||||
‘ª®¯¨à®¢ ® ä ©«®¢: 1.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
|
||||||
launch.dll - 0 error(s), 0 warning(s)
|
|
||||||
</pre>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -101,13 +101,13 @@ typedef struct
|
||||||
int block; // blocksize < 0 needs alternate calc
|
int block; // blocksize < 0 needs alternate calc
|
||||||
} bpc_desc_t;
|
} bpc_desc_t;
|
||||||
|
|
||||||
static bpc_desc_t PixelFormatDescription[] =
|
static bpc_desc_t PFDesc[] =
|
||||||
{
|
{
|
||||||
{PF_INDEXED_24, "pal 24", 3, 1, 0 },
|
{PF_INDEXED_24, "pal 24", 3, 1, 0 },
|
||||||
{PF_INDEXED_32, "pal 32", 4, 1, 0 },
|
{PF_INDEXED_32, "pal 32", 4, 1, 0 },
|
||||||
{PF_RGBA_32, "RGBA", 4, 1, -4 },
|
{PF_RGBA_32, "RGBA 32",4, 1, -4 },
|
||||||
{PF_ARGB_32, "ARGB", 4, 1, -4 },
|
{PF_ARGB_32, "ARGB 32",4, 1, -4 },
|
||||||
{PF_RGB_24, "RGB", 3, 1, -3 },
|
{PF_RGB_24, "RGB 24", 3, 1, -3 },
|
||||||
{PF_DXT1, "DXT1", 4, 1, 8 },
|
{PF_DXT1, "DXT1", 4, 1, 8 },
|
||||||
{PF_DXT2, "DXT2", 4, 1, 16 },
|
{PF_DXT2, "DXT2", 4, 1, 16 },
|
||||||
{PF_DXT3, "DXT3", 4, 1, 16 },
|
{PF_DXT3, "DXT3", 4, 1, 16 },
|
||||||
|
@ -119,7 +119,7 @@ static bpc_desc_t PixelFormatDescription[] =
|
||||||
{PF_LUMINANCE_16, "LUM 16", 2, 2, -2 },
|
{PF_LUMINANCE_16, "LUM 16", 2, 2, -2 },
|
||||||
{PF_LUMINANCE_ALPHA,"LUM A", 2, 1, -2 },
|
{PF_LUMINANCE_ALPHA,"LUM A", 2, 1, -2 },
|
||||||
{PF_RXGB, "RXGB", 3, 1, 16 },
|
{PF_RXGB, "RXGB", 3, 1, 16 },
|
||||||
{PF_ABGR_64, "ABGR", 4, 2, -8 },
|
{PF_ABGR_64, "ABGR 64",4, 2, -8 },
|
||||||
{PF_ABGR_128F, "ABGR128",4, 4, -16},
|
{PF_ABGR_128F, "ABGR128",4, 4, -16},
|
||||||
{PF_PROCEDURE_TEX, "system", 4, 1, -32},
|
{PF_PROCEDURE_TEX, "system", 4, 1, -32},
|
||||||
{PF_UNKNOWN, "", 0, 0, 0 },
|
{PF_UNKNOWN, "", 0, 0, 0 },
|
||||||
|
@ -129,6 +129,7 @@ static bpc_desc_t PixelFormatDescription[] =
|
||||||
#define IMAGE_HAS_ALPHA 0x00000002
|
#define IMAGE_HAS_ALPHA 0x00000002
|
||||||
#define IMAGE_PREMULT 0x00000004 // indices who need in additional premultiply
|
#define IMAGE_PREMULT 0x00000004 // indices who need in additional premultiply
|
||||||
#define IMAGE_GEN_MIPS 0x00000008 // must generate mips
|
#define IMAGE_GEN_MIPS 0x00000008 // must generate mips
|
||||||
|
#define IMAGE_CUBEMAP_FLIP 0x00000010 // it's a cubemap with flipped sides( dds pack )
|
||||||
|
|
||||||
#define CUBEMAP_POSITIVEX 0x00000400L
|
#define CUBEMAP_POSITIVEX 0x00000400L
|
||||||
#define CUBEMAP_NEGATIVEX 0x00000800L
|
#define CUBEMAP_NEGATIVEX 0x00000800L
|
||||||
|
|
|
@ -182,8 +182,7 @@ typedef struct image_s
|
||||||
struct msurface_s *texturechain; // for sort-by-texture world drawing
|
struct msurface_s *texturechain; // for sort-by-texture world drawing
|
||||||
int texnum[6]; // gl texture binding
|
int texnum[6]; // gl texture binding
|
||||||
bool paletted;
|
bool paletted;
|
||||||
|
int texorder[6]; // drawing order pattern
|
||||||
//new stuff starts here
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TEXNUM_LIGHTMAPS 1024
|
#define TEXNUM_LIGHTMAPS 1024
|
||||||
|
|
|
@ -81,7 +81,7 @@ void R_InitParticleTexture (void)
|
||||||
data[y][x][3] = 255;
|
data[y][x][3] = 255;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
r_tex.flags &= ~IMAGE_HAS_ALPHA;//notexture don't have alpha
|
r_tex.flags &= ~IMAGE_HAS_ALPHA;// notexture don't have alpha
|
||||||
r_notexture = R_LoadImage("***r_notexture***", &r_tex, it_wall );
|
r_notexture = R_LoadImage("***r_notexture***", &r_tex, it_wall );
|
||||||
|
|
||||||
R_Bloom_InitTextures();
|
R_Bloom_InitTextures();
|
||||||
|
|
|
@ -539,14 +539,14 @@ void MakeSkyVec (float s, float t, int axis)
|
||||||
R_DrawSkyBox
|
R_DrawSkyBox
|
||||||
==============
|
==============
|
||||||
*/
|
*/
|
||||||
int skytexorder[6] = {4, 5, 1, 0, 2, 3}; //var. 1
|
//var. 1
|
||||||
|
|
||||||
uint RemapSides[6] =
|
uint RemapSides[6] =
|
||||||
{
|
{
|
||||||
0, // ft
|
0, // ft
|
||||||
2, // bk
|
2, // bk
|
||||||
4, // rt
|
4, // lf
|
||||||
5, // lf
|
5, // rt
|
||||||
1, // up
|
1, // up
|
||||||
3, // dn
|
3, // dn
|
||||||
};
|
};
|
||||||
|
@ -555,12 +555,6 @@ void R_DrawSkyBox (void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
#if 0
|
|
||||||
qglEnable (GL_BLEND);
|
|
||||||
GL_TexEnv( GL_MODULATE );
|
|
||||||
qglColor4f (1,1,1,0.5);
|
|
||||||
qglDisable (GL_DEPTH_TEST);
|
|
||||||
#endif
|
|
||||||
if (skyrotate)
|
if (skyrotate)
|
||||||
{ // check for no sky at all
|
{ // check for no sky at all
|
||||||
for (i = 0; i < 6; i++)
|
for (i = 0; i < 6; i++)
|
||||||
|
@ -587,7 +581,7 @@ void R_DrawSkyBox (void)
|
||||||
|| skymins[1][i] >= skymaxs[1][i])
|
|| skymins[1][i] >= skymaxs[1][i])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
GL_Bind (sky_image->texnum[skytexorder[i]]);
|
GL_Bind (sky_image->texnum[sky_image->texorder[i]]);
|
||||||
|
|
||||||
qglBegin (GL_QUADS);
|
qglBegin (GL_QUADS);
|
||||||
MakeSkyVec (skymins[0][i], skymins[1][i], i);
|
MakeSkyVec (skymins[0][i], skymins[1][i], i);
|
||||||
|
@ -597,13 +591,6 @@ void R_DrawSkyBox (void)
|
||||||
qglEnd ();
|
qglEnd ();
|
||||||
}
|
}
|
||||||
qglPopMatrix ();
|
qglPopMatrix ();
|
||||||
|
|
||||||
#if 0
|
|
||||||
glDisable (GL_BLEND);
|
|
||||||
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
|
|
||||||
glColor4f (1,1,1,0.5);
|
|
||||||
glEnable (GL_DEPTH_TEST);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -126,9 +126,9 @@ void R_SetPixelFormat( int width, int height, int depth )
|
||||||
size_t file_size;
|
size_t file_size;
|
||||||
int BlockSize;
|
int BlockSize;
|
||||||
|
|
||||||
BlockSize = PixelFormatDescription[image_desc.format].block;
|
BlockSize = PFDesc[image_desc.format].block;
|
||||||
image_desc.bpp = PixelFormatDescription[image_desc.format].bpp;
|
image_desc.bpp = PFDesc[image_desc.format].bpp;
|
||||||
image_desc.bpc = PixelFormatDescription[image_desc.format].bpc;
|
image_desc.bpc = PFDesc[image_desc.format].bpc;
|
||||||
|
|
||||||
image_desc.numLayers = depth;
|
image_desc.numLayers = depth;
|
||||||
image_desc.width = width;
|
image_desc.width = width;
|
||||||
|
@ -176,12 +176,12 @@ void R_GetPixelFormat( rgbdata_t *pic, imagetype_t type )
|
||||||
memset( &image_desc, 0, sizeof(image_desc));
|
memset( &image_desc, 0, sizeof(image_desc));
|
||||||
for(i = 0; i < PF_TOTALCOUNT; i++)
|
for(i = 0; i < PF_TOTALCOUNT; i++)
|
||||||
{
|
{
|
||||||
if(pic->type == PixelFormatDescription[i].format)
|
if(pic->type == PFDesc[i].format)
|
||||||
{
|
{
|
||||||
image_desc.format = i;//now correct
|
image_desc.format = i;//now correct
|
||||||
BlockSize = PixelFormatDescription[i].block;
|
BlockSize = PFDesc[i].block;
|
||||||
image_desc.bpp = PixelFormatDescription[i].bpp;
|
image_desc.bpp = PFDesc[i].bpp;
|
||||||
image_desc.bpc = PixelFormatDescription[i].bpc;
|
image_desc.bpc = PFDesc[i].bpc;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -971,7 +971,7 @@ bool qrsCompressedTexImage2D( uint target, int level, int internalformat, uint w
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
MsgDev(D_WARN, "qrsCompressedTexImage2D: invalid compression type: %s\n", PixelFormatDescription[internalformat].name );
|
MsgDev(D_WARN, "qrsCompressedTexImage2D: invalid compression type: %s\n", PFDesc[internalformat].name );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -990,7 +990,7 @@ bool CompressedTexImage2D( uint target, int level, int intformat, uint width, ui
|
||||||
{
|
{
|
||||||
bool use_gl_extension = true;
|
bool use_gl_extension = true;
|
||||||
uint dxtformat = 0;
|
uint dxtformat = 0;
|
||||||
uint pixformat = PixelFormatDescription[intformat].format;
|
uint pixformat = PFDesc[intformat].format;
|
||||||
|
|
||||||
if(gl_config.arb_compressed_teximage)
|
if(gl_config.arb_compressed_teximage)
|
||||||
{
|
{
|
||||||
|
@ -1087,7 +1087,7 @@ bool qrsDecompressImageATI( uint target, int level, int internalformat, uint wid
|
||||||
w = width;
|
w = width;
|
||||||
h = height;
|
h = height;
|
||||||
|
|
||||||
switch( PixelFormatDescription[internalformat].format )
|
switch( PFDesc[internalformat].format )
|
||||||
{
|
{
|
||||||
case PF_ATI1N:
|
case PF_ATI1N:
|
||||||
for (z = 0; z < image_desc.numLayers; z++)
|
for (z = 0; z < image_desc.numLayers; z++)
|
||||||
|
@ -1237,7 +1237,7 @@ bool qrsDecompressImageATI( uint target, int level, int internalformat, uint wid
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
MsgDev(D_WARN, "qrsDecompressImageATI: invalid compression type: %s\n", PixelFormatDescription[internalformat].name );
|
MsgDev(D_WARN, "qrsDecompressImageATI: invalid compression type: %s\n", PFDesc[internalformat].name );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1423,13 +1423,39 @@ bool R_LoadImageARGB( byte *data )
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
===============
|
||||||
|
R_LoadImageBGRA
|
||||||
|
===============
|
||||||
|
*/
|
||||||
|
bool R_LoadImageBGRA( byte *data )
|
||||||
|
{
|
||||||
|
byte *trans = imagebuffer;
|
||||||
|
int i, s = image_desc.width * image_desc.height;
|
||||||
|
|
||||||
|
if (s&3)
|
||||||
|
{
|
||||||
|
MsgDev(D_ERROR, "R_LoadImageBGRA: s&3\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// swap green and red
|
||||||
|
for (i = 0; i < s; i++ )
|
||||||
|
{
|
||||||
|
trans[(i<<2)+0] = data[i*4+2];
|
||||||
|
trans[(i<<2)+1] = data[i*4+1];
|
||||||
|
trans[(i<<2)+2] = data[i*4+0];
|
||||||
|
trans[(i<<2)+3] = data[i*4+3];
|
||||||
|
}
|
||||||
|
return R_LoadTexImage((uint*)trans );
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===============
|
===============
|
||||||
R_LoadImage32
|
R_LoadImageRGBA
|
||||||
===============
|
===============
|
||||||
*/
|
*/
|
||||||
bool R_LoadImage32 (byte *data )
|
bool R_LoadImageRGBA (byte *data )
|
||||||
{
|
{
|
||||||
byte *trans = imagebuffer;
|
byte *trans = imagebuffer;
|
||||||
int i, s = image_desc.width * image_desc.height;
|
int i, s = image_desc.width * image_desc.height;
|
||||||
|
@ -1439,7 +1465,7 @@ bool R_LoadImage32 (byte *data )
|
||||||
|
|
||||||
if (s&3)
|
if (s&3)
|
||||||
{
|
{
|
||||||
MsgDev(D_ERROR, "R_LoadImage32: s&3\n");
|
MsgDev(D_ERROR, "R_LoadImageRGBA: s&3\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (i = 0; i < s; i++ )
|
for (i = 0; i < s; i++ )
|
||||||
|
@ -1454,10 +1480,10 @@ bool R_LoadImage32 (byte *data )
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===============
|
===============
|
||||||
R_LoadImage24
|
R_LoadImageRGB
|
||||||
===============
|
===============
|
||||||
*/
|
*/
|
||||||
bool R_LoadImage24(byte *data )
|
bool R_LoadImageRGB(byte *data )
|
||||||
{
|
{
|
||||||
byte *trans = imagebuffer;
|
byte *trans = imagebuffer;
|
||||||
int i, s = image_desc.width * image_desc.height;
|
int i, s = image_desc.width * image_desc.height;
|
||||||
|
@ -1466,7 +1492,7 @@ bool R_LoadImage24(byte *data )
|
||||||
|
|
||||||
if (s&3)
|
if (s&3)
|
||||||
{
|
{
|
||||||
MsgDev(D_ERROR, "R_LoadImage24: s&3\n");
|
MsgDev(D_ERROR, "R_LoadImageRGB: s&3\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1574,6 +1600,8 @@ image_t *R_LoadImage(char *name, rgbdata_t *pic, imagetype_t type )
|
||||||
bool iResult = true;
|
bool iResult = true;
|
||||||
int i, numsides = 1, width, height;
|
int i, numsides = 1, width, height;
|
||||||
uint offset = 0;
|
uint offset = 0;
|
||||||
|
int skyorder_q2[6] = { 2, 3, 1, 0, 4, 5, }; // Quake, Half-Life skybox ordering
|
||||||
|
int skyorder_ms[6] = { 4, 5, 1, 0, 2, 3 }; // Microsoft DDS ordering (reverse)
|
||||||
byte *buf;
|
byte *buf;
|
||||||
|
|
||||||
//nothing to load
|
//nothing to load
|
||||||
|
@ -1600,7 +1628,14 @@ image_t *R_LoadImage(char *name, rgbdata_t *pic, imagetype_t type )
|
||||||
strncpy (image->name, name, sizeof(image->name));
|
strncpy (image->name, name, sizeof(image->name));
|
||||||
image->registration_sequence = registration_sequence;
|
image->registration_sequence = registration_sequence;
|
||||||
|
|
||||||
if(pic->flags & IMAGE_CUBEMAP) numsides = 6;
|
if(pic->flags & IMAGE_CUBEMAP)
|
||||||
|
{
|
||||||
|
numsides = 6;
|
||||||
|
if(pic->flags & IMAGE_CUBEMAP_FLIP)
|
||||||
|
memcpy(image->texorder, skyorder_ms, sizeof(int) * 6 );
|
||||||
|
else memcpy(image->texorder, skyorder_q2, sizeof(int) * 6 );
|
||||||
|
}
|
||||||
|
else memset(image->texorder, 0, sizeof(int) * 6 );
|
||||||
|
|
||||||
image->width = width = pic->width;
|
image->width = width = pic->width;
|
||||||
image->height = height = pic->height;
|
image->height = height = pic->height;
|
||||||
|
@ -1619,16 +1654,16 @@ image_t *R_LoadImage(char *name, rgbdata_t *pic, imagetype_t type )
|
||||||
R_SetPixelFormat( image_desc.width, image_desc.height, image_desc.numLayers );
|
R_SetPixelFormat( image_desc.width, image_desc.height, image_desc.numLayers );
|
||||||
offset = image_desc.SizeOfFile;// move pointer
|
offset = image_desc.SizeOfFile;// move pointer
|
||||||
|
|
||||||
MsgDev(D_LOAD, "loading %s [%s] \n", name, PixelFormatDescription[image_desc.format].name );
|
MsgDev(D_LOAD, "loading %s [%s] \n", name, PFDesc[image_desc.format].name );
|
||||||
|
|
||||||
switch(pic->type)
|
switch(pic->type)
|
||||||
{
|
{
|
||||||
case PF_INDEXED_24: iResult = R_LoadImage24( buf ); break;
|
case PF_INDEXED_24: iResult = R_LoadImageRGB( buf ); break;
|
||||||
case PF_INDEXED_32: iResult = R_LoadImage32( buf ); break;
|
case PF_INDEXED_32: iResult = R_LoadImageRGBA( buf ); break;
|
||||||
case PF_PROCEDURE_TEX:
|
case PF_PROCEDURE_TEX:
|
||||||
case PF_RGBA_32:
|
case PF_RGBA_32: iResult = R_LoadTexImage((uint*)buf ); break;
|
||||||
case PF_ABGR_64: iResult = R_LoadTexImage((uint*)buf ); break;
|
case PF_ABGR_64: iResult = R_LoadImageBGRA( buf ); break;
|
||||||
case PF_RGB_24: iResult = R_LoadImage24( buf ); break;
|
case PF_RGB_24: iResult = R_LoadImageRGB( buf ); break;
|
||||||
case PF_LUMINANCE:
|
case PF_LUMINANCE:
|
||||||
case PF_LUMINANCE_16:
|
case PF_LUMINANCE_16:
|
||||||
case PF_LUMINANCE_ALPHA:
|
case PF_LUMINANCE_ALPHA:
|
||||||
|
|
Reference in New Issue