Предлагаю здесь постить баги и косяки, найденные Вами в коде.
Так же рад был бы видеть здесь патчи (сгенерить их можно в тортойз-svn), либо описания того, как эти баги исправить.
Итак, поехали :)
Фикс бага с битыми мешами последней ревизии небулы (патч отключает оптимизацию):
Index: src/gfx2/nmesh2_main.cc =================================================================== --- src/gfx2/nmesh2_main.cc (revision 3283) +++ src/gfx2/nmesh2_main.cc (working copy) @@ -13,7 +13,7 @@ nNebulaClass(nMesh2, "nresource"); #ifndef NGAME -bool nMesh2::optimizeMesh = true; +bool nMesh2::optimizeMesh = false;//true; // by Rageous, see http://nebuladevice.cubik.org/forum/index.php/topic,71.0.html #endif //NGAME //------------------------------------------------------------------------------
Фикс ошибок и варнингов компиляции под vs7.1 (неверный путь к либам, игнор некоторых либ, настройка дебажной информации):
Index: buildsys3/generators/makefile.py =================================================================== --- buildsys3/generators/makefile.py (revision 3283) +++ buildsys3/generators/makefile.py (working copy) @@ -71,7 +71,7 @@ # calculate these once for the workspace self.workspacePath = workspace.GetWorkspacePath(defaultLocation) self.incDirStr = workspace.GetIncSearchDirsString(defaultLocation) - self.libDirStr = workspace.GetLibSearchDirsString('win32_vc_i386', + self.libDirStr = workspace.GetLibSearchDirsString('win32_vc71_i386', defaultLocation) # make sure the workspace/projects directory exists Index: buildsys3/generators/vstudio71.py =================================================================== --- buildsys3/generators/vstudio71.py (revision 3283) +++ buildsys3/generators/vstudio71.py (working copy) @@ -38,21 +38,23 @@ Name="VCCLCompilerTool" %(nebSymsStr)s %(objectNameStr)s - %(compileAsStr)s/> + %(compileAsStr)s + ProgramDataBaseFileName="$(OutDir)/d_$(ProjectName).pdb"/> </FileConfiguration> <FileConfiguration Name="Release|Win32"> <Tool Name="VCCLCompilerTool" %(nebSymsStr)s %(objectNameStr)s - %(compileAsStr)s/> + %(compileAsStr)s + ProgramDataBaseFileName="$(OutDir)/$(ProjectName).pdb"/> </FileConfiguration> </File> ''' STR__NOCFG_SRC_FILE = '''\ <File - RelativePath="%(relPath)s" /> + RelativePath="%(relPath)s"/> ''' STR_DUMMY_SRC_FILE = '''\ @@ -156,12 +158,14 @@ ''' STR_PROJ_CONFIG_LINKER_TOOL_S2_DEBUG = '''\ + IgnoreDefaultLibraryNames="libcd" GenerateDebugInformation="TRUE" LinkIncremental="2" ProgramDatabaseFile="%s" ''' STR_PROJ_CONFIG_LINKER_TOOL_S2_RELEASE = '''\ + IgnoreDefaultLibraryNames="libc" LinkIncremental="1" OptimizeReferences="2" EnableCOMDATFolding="2" @@ -227,7 +231,7 @@ # calculate these once for the workspace self.vcprojLocation = workspace.GetWorkspacePath(defaultLocation) self.incDirStr = workspace.GetIncSearchDirsString(defaultLocation) - self.libDirStr = workspace.GetLibSearchDirsString('win32_vc_i386', + self.libDirStr = workspace.GetLibSearchDirsString('win32_vc71_i386', defaultLocation) # make sure the workspace/projects directory exists
после применения не забудьте перегенерить солюшны и проекты!
Фикс ассерта в таблице анимаций, проверяющий наличие не той таблицы (вероятно кто-то жостко копи-пейстил):
Index: code/mangalore/physics/materialtable.cc =================================================================== --- code/mangalore/physics/materialtable.cc (revision 3283) +++ code/mangalore/physics/materialtable.cc (working copy) @@ -75,7 +75,7 @@ /* load bounce data */ nXmlTable* bounceTable = materialDb.FindTable("bouncyness"); - n_assert(0 != frictionTable); + n_assert(0 != bounceTable); n_assert(bounceTable->NumRows() == materialCount + 2); n_assert(bounceTable->NumColumns() == materialCount + 1); for (int row = 2; row < bounceTable->NumRows(); ++row)
Фикс хидера эйлеровых углов (исправляет ambiguous call к функции atan2):
Index: code/nebula2/inc/mathlib/eulerangles.h =================================================================== --- code/nebula2/inc/mathlib/eulerangles.h (revision 3283) +++ code/nebula2/inc/mathlib/eulerangles.h (working copy) @@ -70,13 +70,13 @@ if (sy > 16*FLT_EPSILON) { this->x = (float) atan2(m.m[0][1], m.m[0][2]); - this->y = (float) atan2(sy, m.m[0][0]); + this->y = (float) atan2((float)sy, m.m[0][0]); this->z = (float) atan2(m.m[1][0], -m.m[2][0]); } else { this->x = (float) atan2(-m.m[1][2], m.m[1][1]); - this->y = (float) atan2(sy, m.m[0][0]); + this->y = (float) atan2((float)sy, m.m[0][0]); this->z = 0; } } @@ -86,13 +86,13 @@ if (cy > 16*FLT_EPSILON) { this->x = (float) atan2(m.m[2][1], m.m[2][2]); - this->y = (float) atan2(-m.m[2][0], cy); + this->y = (float) atan2(-m.m[2][0], (float)cy); this->z = (float) atan2(m.m[1][0], m.m[0][0]); } else { this->x = (float) atan2(-m.m[1][2], m.m[1][1]); - this->y = (float) atan2(-m.m[2][0], cy); + this->y = (float) atan2(-m.m[2][0], (float)cy); this->z = 0; } }
Фикс преобразования строки ASCII <> UTF8 класса nString
ВНИМАНИЕ: патч платформо-зависимый и работает только под Win32 (под другие платформы код остается прежним)
но, согласитесь, это лучше, чем старый вариант, который работал только для немецкого языка ^_^
брать в качалке
Фикс UB в обработке параметров команды setmastervolume() аудио-сервера:
Index: code/nebula2/src/audio3/naudioserver3_cmds.cc =================================================================== --- code/nebula2/src/audio3/naudioserver3_cmds.cc (revision 3283) +++ code/nebula2/src/audio3/naudioserver3_cmds.cc (working copy) @@ -65,7 +65,9 @@ n_setmastervolume(void* slf, nCmd* cmd) { nAudioServer3* self = (nAudioServer3*) slf; - self->SetMasterVolume(nAudioServer3::StringToCategory(cmd->In()->GetS()), cmd->In()->GetF()); + nString category = cmd->In()->GetS(); + float volume = cmd->In()->GetF(); + self->SetMasterVolume(nAudioServer3::StringToCategory(category.Get()), volume); } //------------------------------------------------------------------------------
ВНИМАНИЕ: возможна несовместимость порядка аргументов с существующими скриптами!
проверьте, чтобы в вызовах setmastervolume() из скриптов сначала шла категория, а затем громкость!
НЕ БАГ
фикс отключает проверку на совпадение кол-ва аргументов переданных из TCL скрипта с кол-вом аргументов сигнатуры, что позволяет делать дефолтные значения аргументов (в сигнатуре указываем все, а в обработке команды проверяем количество и подставляем дефолты по необходимости):
Index: code/nebula2/src/script/ntclserver_commands.cc =================================================================== --- code/nebula2/src/script/ntclserver_commands.cc (revision 3283) +++ code/nebula2/src/script/ntclserver_commands.cc (working copy) @@ -239,14 +239,14 @@ _getInArgs(Tcl_Interp* interp, nCmd* cmd, int objc, Tcl_Obj* const objv[]) { long num_args = cmd->GetNumInArgs(); - if (num_args != objc) { - return false; - } + //if (num_args != objc) { + // return false; + //} // read out arguments int i; nArg* arg; cmd->Rewind(); - for (i = 0; i < num_args; i++) + for (i = 0; i < objc; i++) { bool arg_ok = false; arg = cmd->In();
Фикс проблемы отсутствия теней при переходе на Февральский DXSDK:
Index: nd3d9shader_main.cc =================================================================== --- nd3d9shader_main.cc (revision 3283) +++ nd3d9shader_main.cc (working copy) @@ -105,9 +105,9 @@ ID3DXBuffer* errorBuffer = 0; #if N_D3D9_DEBUG - DWORD compileFlags = D3DXSHADER_DEBUG | D3DXSHADER_SKIPOPTIMIZATION; + DWORD compileFlags = D3DXSHADER_DEBUG | D3DXSHADER_SKIPOPTIMIZATION | D3DXSHADER_USE_LEGACY_D3DX9_31_DLL; #else - DWORD compileFlags = 0; + DWORD compileFlags = D3DXSHADER_USE_LEGACY_D3DX9_31_DLL; #endif // create include file handler
Rageous
Работаешь ли ты сейчас с Небулой?
Тема в архиве.