Курилка программистов, Флуд на около программерские темы |
Здравствуйте, гость ( Авторизация | Регистрация )
Курилка программистов, Флуд на около программерские темы |
28.02.2021, 15:11
Сообщение
#401
|
|
. Репутация: 750 Группа: Участник Сообщений: 7072 Награды: 4 Регистрация: 30.07.2010 |
Для чего в графических API предусмотрена возможность включать и отключать блендинг ( glEnable(GL_BLEND)/glDisable(GL_BLEND) ), если можно просто выставлять функции ONE и ZERO и получить эквивалент отключения?
|
 
|
|
|
|
01.05.2021, 16:34
Сообщение
#402
|
|
. Репутация: 750 Группа: Участник Сообщений: 7072 Награды: 4 Регистрация: 30.07.2010 |
Листал недавно вики по ОпенГЛ и узнал кое-что новое для себя о языке C.
Все наверно знают что такое указатели на функции, как они объявляются и используются Код typedef void (*PMyFunction)(int o); // объявление типа PMyFunction pf = NULL; // объявление переменной этого типа pf(111); // вызов функции по указателю Синтаксис объявления со звёздочкой и именем в скобках явно не самая красивая и понятная вещь в языке C. А ведь можно написать и вот так: Код typedef void TMyFunction(int o); И это получается объявление.. наверно не-указателя на функцию. Даже не знаю как это правильно называется по научному. Такой тип можно применять для создания указателей на функции, только звёздочку придётся указывать рядом с именем переменной, и это ничем не будет отличатся от привычного способа. А если звёздочку не указывать? Код TMyFunction *new_func_ptr; // указатель на функцию TMyFunction new_func;// ??? Нет, компилятор в таком случае не выдаст ошибку. А если попытаться присвоить переменной new_func значение то выдаст, потому что то что мы написали это эквивалент объявления функции типа такого: Код void new_func(int o); Что просто указывает что где-то там существует функция с именем new_func, которая принимает один аргумент типа int и возвращает void. Указывать такое кстати можно не только в глобальном пространстве, но и внутри функций и блоков, но сегодня не об этом. Применить такой тип без звёздочки в качестве возвращаемого значения функции или как часть структуры нельзя, компилятор выдаст ошибку вроде "functions cannot return functions", зато можно применить в качестве параметра функции. Код void funcfunc(TMyFunction f) { f(1234); } Что впрочем не удивительно, ведь можно точно так же написать: Код void funcfunc(void f(int o)) { f(1234); } И всё будет работать. Ну и наконец самый вопиющий случай, в котором можно использовать такой тип: Код TMyFunction print_int { printf("%d\n", o+10); } И да, это работает. Информация о параметрах и возвращаемом типе это функции берётся из typedef'а, указанного перед именем и телом. Вот так то! Не то чтобы это полезная фишка, но просто скажите, вы о такой возможности знали? А ещё интересно каким будет поведение компилятора плюсов в отношении этого, где функции могут быть частью структур, но проверять неохота. |
 
|
|
12.05.2021, 18:32
Сообщение
#403
|
|
Мастер Игры Репутация: 104 Группа: Участник Сообщений: 1331 Регистрация: 08.08.2018 |
Как исправить вот такую ошибку:
Код Error 10 error C2139: 'MovementManager::EPathType' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_polymorphic' (alife_monster_movement_manager_script.cpp) X:\src\Externals\boost_1_76_0\boost\type_traits\is_polymorphic.hpp 112 1 xrGame Код is_polymorphic.hpp Код // (C) Copyright John Maddock 2000. // Use, modification and distribution are subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt). // // See http://www.boost.org/libs/type_traits for most recent version including documentation. #ifndef BOOST_TT_IS_POLYMORPHIC_HPP #define BOOST_TT_IS_POLYMORPHIC_HPP #include <boost/type_traits/intrinsics.hpp> #include <boost/type_traits/integral_constant.hpp> #ifndef BOOST_IS_POLYMORPHIC #include <boost/type_traits/is_class.hpp> #endif #include <boost/detail/workaround.hpp> #if defined(BOOST_MSVC) && (BOOST_MSVC >= 1700) #pragma warning(push) #pragma warning(disable:4250) #endif namespace boost{ #ifndef BOOST_IS_POLYMORPHIC namespace detail{ template <class T> struct is_polymorphic_imp1 { # if BOOST_WORKAROUND(__MWERKS__, <= 0x2407) // CWPro7 should return false always. typedef char d1, (&d2)[2]; # else struct d1 : public T { d1(); # if !defined(__GNUC__) // this raises warnings with some classes, and buys nothing with GCC ~d1()throw(); # endif char padding[256]; private: // keep some picky compilers happy: d1(const d1&); d1& operator=(const d1&); }; struct d2 : public T { d2(); virtual ~d2()throw(); # if !defined(BOOST_MSVC) && !defined(__ICL) // for some reason this messes up VC++ when T has virtual bases, // probably likewise for compilers that use the same ABI: struct unique{}; virtual void unique_name_to_boost5487629(unique*); # endif char padding[256]; private: // keep some picky compilers happy: d2(const d2&); d2& operator=(const d2&); }; # endif BOOST_STATIC_CONSTANT(bool, value = (sizeof(d2) == sizeof(d1))); }; template <class T> struct is_polymorphic_imp1<T const> : public is_polymorphic_imp1<T>{}; template <class T> struct is_polymorphic_imp1<T const volatile> : public is_polymorphic_imp1<T>{}; template <class T> struct is_polymorphic_imp1<T volatile> : public is_polymorphic_imp1<T>{}; template <class T> struct is_polymorphic_imp2 { BOOST_STATIC_CONSTANT(bool, value = false); }; template <bool is_class> struct is_polymorphic_selector { template <class T> struct rebind { typedef is_polymorphic_imp2<T> type; }; }; template <> struct is_polymorphic_selector<true> { template <class T> struct rebind { typedef is_polymorphic_imp1<T> type; }; }; template <class T> struct is_polymorphic_imp { typedef is_polymorphic_selector< ::boost::is_class<T>::value> selector; typedef typename selector::template rebind<T> binder; typedef typename binder::type imp_type; BOOST_STATIC_CONSTANT(bool, value = imp_type::value); }; } // namespace detail template <class T> struct is_polymorphic : public integral_constant<bool, ::boost::detail::is_polymorphic_imp<T>::value> {}; #else // BOOST_IS_POLYMORPHIC template <class T> struct is_polymorphic : public integral_constant<bool, BOOST_IS_POLYMORPHIC(T)> {}; // 112: вот здесь ошибка #endif } // namespace boost #if defined(BOOST_MSVC) && (BOOST_MSVC >= 1700) #pragma warning(pop) #endif #endif Собираю на Visual Studio Community 2013 with Update 5. |
 
|
|
12.05.2021, 18:55
Сообщение
#404
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
{}; // 112: вот здесь ошибка Ошибка не в файле is_polymorphic.hpp, а в файле alife_monster_movement_manager_script.cpp Надо в него добавить инклуд заголовочного файла с перечислением MovementManager::EPathType. У тебя же вроде собирался движок, почему такие ошибки сейчас лезут? |
 
|
|
12.05.2021, 19:10
Сообщение
#405
|
|
Мастер Игры Репутация: 104 Группа: Участник Сообщений: 1331 Регистрация: 08.08.2018 |
У тебя же вроде собирался движок, почему такие ошибки сейчас лезут? Пытаюсь перенести проект на Visual Studio Community 2013 with Update 5.Остались только вот эти ошибки: Код Error 10 error C2139: 'MovementManager::EPathType' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_polymorphic' (alife_monster_movement_manager_script.cpp) X:\src\Externals\boost_1_76_0\boost\type_traits\is_polymorphic.hpp 112 1 xrGame
Error 11 error C2139: 'PatrolPathManager::EPatrolStartType' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_polymorphic' (alife_monster_patrol_path_manager_script.cpp) X:\src\Externals\boost_1_76_0\boost\type_traits\is_polymorphic.hpp 112 1 xrGame Error 12 error C2139: 'PatrolPathManager::EPatrolRouteType' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_polymorphic' (alife_monster_patrol_path_manager_script.cpp) X:\src\Externals\boost_1_76_0\boost\type_traits\is_polymorphic.hpp 112 1 xrGame |
 
|
|
12.05.2021, 19:24
Сообщение
#406
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
|
 
|
|
12.05.2021, 21:22
Сообщение
#407
|
|
Мастер Игры Репутация: 104 Группа: Участник Сообщений: 1331 Регистрация: 08.08.2018 |
Ищи, где объявлены перечисления из ошибок, и добавь их инклуды в cpp. Спасибо за подсказку! Теперь проект собирается, правда только Release и Mixed, последний при запуске игры падает с ошибкой:Код 0023:63B8A250 xrLua.dll, luaF_findupval(), x:\src\xrlua\luajit\src\lfunc.c, 61 Хз что не так с этой xrLua, изменения в код xrLua не вносил. |
 
|
|
12.05.2021, 21:31
Сообщение
#408
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
Хз что не так с этой xrLua, изменения в код xrLua не вносил. Так обычно и бывает: данные где-то сломались, функции как-то вызывались, а вылетело там, где попытались работать с кривыми данными. 100% что дело не в xrLua. Открой стек вызовов, пройди по нему вверх от xrLua и дойди до сталкерского кода. |
 
|
|
25.05.2021, 19:21
Сообщение
#409
|
|
Мастер Игры Репутация: 104 Группа: Участник Сообщений: 1331 Регистрация: 08.08.2018 |
Открой стек вызовов, пройди по нему вверх от xrLua и дойди до сталкерского кода. Код > xrLua.dll!luaF_findupval(lua_State * L, lua_TValue * level) Line 61 C
[External Code] [Frames below may be incorrect and/or missing] xrLua.dll!luaJIT_run(lua_State * L, lua_TValue * func, int nresults) Line 117 C xrLua.dll!luaD_precall(lua_State * L, lua_TValue * func, int nresults) Line 282 C xrLua.dll!luaD_call(lua_State * L, lua_TValue * func, int nResults) Line 380 C xrLua.dll!lua_call(lua_State * L, int nargs, int nresults) Line 803 C xrEngine.exe!bfDoFile(lua_State * tpLuaVM, const char * caScriptName, const char * caNameSpaceName, bool bCall) Line 262 C++ xrEngine.exe!Script::bfLoadFileIntoNamespace(lua_State * tpLuaVM, const char * caScriptName, const char * caNamespaceName, bool bCall) Line 320 C++ xrEngine.exe!CResourceManager::LS_Load() Line 221 C++ xrEngine.exe!CResourceManager::OnDeviceCreate(IReader * F) Line 62 C++ xrEngine.exe!CResourceManager::OnDeviceCreate(const char * shName) Line 169 C++ xrEngine.exe!CRenderDevice::_Create(const char * shName) Line 69 C++ xrEngine.exe!CRenderDevice::Create() Line 109 C++ xrEngine.exe!Startup() Line 252 C++ xrEngine.exe!WinMain_impl(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int nCmdShow) Line 685 C++ xrEngine.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int nCmdShow) Line 745 C++ [External Code] |
 
|
|
25.05.2021, 19:33
Сообщение
#410
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
А может в логе/Output(в студии) уже есть имя скрипта и описание ошибки? Или появится, если нажать F5(Continue).
|
 
|
|
26.05.2021, 03:50
Сообщение
#411
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
Вопрос по жава скрипту.
Код var n = 0.05 * 0.05; var s = n.toString(); s = s.substr(0, s.length - 1).replace(/[,.]?0+$/, ''); print(n); print(s); Первый принт выдает 0.0025000000000000005, второй принт 0.0025 (попытка совладать с лишним мусором). Способ весьма топорный, так как не всегда эти нули получаются, в итоге обрезается то что не нужно (к примеру 0.5 * 0.5 сразу выдает число в лицеприятном виде). Задача: обрезать лишний мусор (нули и возможную цифру в конце), причем заранее неизвестно, есть ли они вообще, а также количество цифр после запятой тоже неизвестно. Быстрый гугол выдает способы с toFixed, но там вручную округляют, а мне не нужно ничего округлять. -------------------- |
 
|
|
27.05.2021, 00:34
Сообщение
#412
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
Так ну вроде получилось...
Код var n = 0.05 * 0.05; print( +n.toFixed(16) ); // 0.0025 А именно 16 нужно потому, что в JS Сообщение отредактировал RayTwitty - 27.05.2021, 01:48 -------------------- |
 
|
|
08.06.2021, 13:28
Сообщение
#413
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
Меня интересует история одного форка Крайэнгины- StEngine.
Дам "на водку": StalTech, AEK. Говорят, что это развод. А вы что думаете по этому поводу? Я знаком с главным худруком AEK (по перезвону на сайте АМК), кое что делал бесплатно для проекта. А я к чему спрашиваю: хочу зашифроваться от КрайТека под другой вывеской. Сообщение отредактировал Diesel - 08.06.2021, 13:41 |
 
|
|
08.06.2021, 22:00
Сообщение
#414
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
Видели как Макрософты Вин7 унизили в Визуалке 2019?
#if (_ATL_NTDDI_MIN > NTDDI_WIN7) return(::LoadLibraryExW(pszLibrary, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32)); #else #ifndef _USING_V110_SDK71_ Что то я тут упоролся в инклудах и 1001 вариант с ошибками. |
 
|
|
08.06.2021, 22:03
Сообщение
#415
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
А что не так?
Немного специфический префикс у дефайна _ATL_, но почему бы и нет. |
 
|
|
08.06.2021, 22:07
Сообщение
#416
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
abramcumner, так то как бы пофиг на их задумки, но у меня необъявлено в VS2019 ( а в 2012 всё ништяк):
LOAD_LIBRARY_SEARCH_SYSTEM32 и SetDefaultDllDirectories IFDYNAMICGETCACHEDFUNCTION(L"kernel32.dll", SetDefaultDllDirectories, pfSetDefaultDllDirectories) { return(::LoadLibraryExW(pszLibrary, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32)); } |
 
|
|
08.06.2021, 22:19
Сообщение
#417
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
Похоже, что у тебя где-то прописан дефайн типа:
# define _WIN32_WINNT 0x0501 Из-за него ошибки, так как в той версии виндовс не было LOAD_LIBRARY_SEARCH_SYSTEM32 и SetDefaultDllDirectories |
 
|
|
08.06.2021, 22:23
Сообщение
#418
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
|
 
|
|
08.06.2021, 22:28
Сообщение
#419
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
# define _WIN32_WINNT 0x0501 Точно - где то видел и удалил. Это типа ВИН98? Такой или аналогичной строчкой ты говоришь компилятору, что тебе нужны только функции из определенной версии виндовс. Поэтому функции из более новых версий не найдутся. Нужно найти строчку и удалить, тогда компилятор подставит свою любимую версию виндовс(vs2019 любит вин10). От того на какой винде собираешь исходники не зависит, только от студии, ну и винсдк. |
 
|
|
09.06.2021, 15:32
Сообщение
#420
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
abramcumner, не подскажешь - это из инклудов (если да, то из каких, а то у меня в самом проекте этого много)?:
1>TerrainGIGen.obj : error LNK2005: "double const __cdecl NSH::NLegendre:<1>(int,int,double)" (??$P@$00@NLegendre@NSH@@YA?BNHHN@Z) уже определен в StdAfx.obj А вот этой штуки нет вообще в проекте NLegendre Получается такая фигня, что если исключить из TerrainGIGen.obj NSH, то ошибка перескакивает на другой cpp. Эта ошибка в VS2019 vc142, на vc110 нет ошибки. Сообщение отредактировал Diesel - 09.06.2021, 15:37 |
 
|
|
Текстовая версия | Сейчас: 25.04.2024, 23:11 |