Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!
22 страниц V  « < 19 20 21 22 >  
Ответить в данную темуНачать новую тему
> Курилка программистов, Флуд на около программерские темы
Modera
сообщение 28.02.2021, 15:11
Сообщение #401


.
**********************

Репутация:   750  
Группа: Участник
Сообщений: 7072
Награды: 4
Регистрация: 30.07.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Для чего в графических API предусмотрена возможность включать и отключать блендинг ( glEnable(GL_BLEND)/glDisable(GL_BLEND) ), если можно просто выставлять функции ONE и ZERO и получить эквивалент отключения?
Перейти в начало страницы
 
Modera
сообщение 01.05.2021, 16:34
Сообщение #402


.
**********************

Репутация:   750  
Группа: Участник
Сообщений: 7072
Награды: 4
Регистрация: 30.07.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Листал недавно вики по ОпенГЛ и узнал кое-что новое для себя о языке C. laugh.gif
Все наверно знают что такое указатели на функции, как они объявляются и используются
Код
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'а, указанного перед именем и телом. Вот так то!
Не то чтобы это полезная фишка, но просто скажите, вы о такой возможности знали?

А ещё интересно каким будет поведение компилятора плюсов в отношении этого, где функции могут быть частью структур, но проверять неохота.
Перейти в начало страницы
 
xrModder
сообщение 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.
Перейти в начало страницы
 
abramcumner
сообщение 12.05.2021, 18:55
Сообщение #404


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(xrModder @ 12.05.2021, 18:32) *
{}; // 112: вот здесь ошибка

Ошибка не в файле is_polymorphic.hpp, а в файле alife_monster_movement_manager_script.cpp
Надо в него добавить инклуд заголовочного файла с перечислением MovementManager::EPathType.

У тебя же вроде собирался движок, почему такие ошибки сейчас лезут?
Перейти в начало страницы
 
xrModder
сообщение 12.05.2021, 19:10
Сообщение #405


Мастер Игры
************

Репутация:   104  
Группа: Участник
Сообщений: 1331
Регистрация: 08.08.2018




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(abramcumner @ 12.05.2021, 21:55) *
У тебя же вроде собирался движок, почему такие ошибки сейчас лезут?
Пытаюсь перенести проект на 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
Перейти в начало страницы
 
abramcumner
сообщение 12.05.2021, 19:24
Сообщение #406


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(xrModder @ 12.05.2021, 19:10) *
Пытаюсь перенести проект на Visual Studio Community 2013 with Update 5.

Понял.

Ищи, где объявлены перечисления из ошибок, и добавь их инклуды в cpp.
Перейти в начало страницы
 
xrModder
сообщение 12.05.2021, 21:22
Сообщение #407


Мастер Игры
************

Репутация:   104  
Группа: Участник
Сообщений: 1331
Регистрация: 08.08.2018




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(abramcumner @ 12.05.2021, 22:24) *
Ищи, где объявлены перечисления из ошибок, и добавь их инклуды в cpp.
Спасибо за подсказку! Теперь проект собирается, правда только Release и Mixed, последний при запуске игры падает с ошибкой:
Код
0023:63B8A250 xrLua.dll, luaF_findupval(), x:\src\xrlua\luajit\src\lfunc.c, 61

Хз что не так с этой xrLua, изменения в код xrLua не вносил.
Перейти в начало страницы
 
abramcumner
сообщение 12.05.2021, 21:31
Сообщение #408


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(xrModder @ 12.05.2021, 21:22) *
Хз что не так с этой xrLua, изменения в код xrLua не вносил.

Так обычно и бывает: данные где-то сломались, функции как-то вызывались, а вылетело там, где попытались работать с кривыми данными. 100% что дело не в xrLua.
Открой стек вызовов, пройди по нему вверх от xrLua и дойди до сталкерского кода.
Перейти в начало страницы
 
xrModder
сообщение 25.05.2021, 19:21
Сообщение #409


Мастер Игры
************

Репутация:   104  
Группа: Участник
Сообщений: 1331
Регистрация: 08.08.2018




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(abramcumner @ 13.05.2021, 00:31) *
Открой стек вызовов, пройди по нему вверх от 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]
Перейти в начало страницы
 
abramcumner
сообщение 25.05.2021, 19:33
Сообщение #410


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


А может в логе/Output(в студии) уже есть имя скрипта и описание ошибки? Или появится, если нажать F5(Continue).
Перейти в начало страницы
 
RayTwitty
сообщение 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, но там вручную округляют, а мне не нужно ничего округлять.


--------------------
Перейти в начало страницы
 
RayTwitty
сообщение 27.05.2021, 00:34
Сообщение #412


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Так ну вроде получилось...
https://learn.javascript.ru/number#неточные-вычисления

Код
var n = 0.05 * 0.05;
print( +n.toFixed(16) ); // 0.0025


А именно 16 нужно потому, что в JS Double precision, я так понимаю.

Сообщение отредактировал RayTwitty - 27.05.2021, 01:48


--------------------
Перейти в начало страницы
 
Diesel
сообщение 08.06.2021, 13:28
Сообщение #413


Почти Мастер
***********

Репутация:   111  
Группа: Участник
Сообщений: 1158
Награды: 3
Регистрация: 07.08.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


Меня интересует история одного форка Крайэнгины- StEngine.
Дам "на водку": StalTech, AEK.
Говорят, что это развод. А вы что думаете по этому поводу?

https://www.gamedev.ru/projects/forum/?id=163282

Я знаком с главным худруком AEK (по перезвону на сайте АМК), кое что делал бесплатно для проекта.

А я к чему спрашиваю: хочу зашифроваться от КрайТека под другой вывеской.

Сообщение отредактировал Diesel - 08.06.2021, 13:41
Перейти в начало страницы
 
Diesel
сообщение 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 вариант с ошибками.

Перейти в начало страницы
 
abramcumner
сообщение 08.06.2021, 22:03
Сообщение #415


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


А что не так?
Немного специфический префикс у дефайна _ATL_, но почему бы и нет.
Перейти в начало страницы
 
Diesel
сообщение 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));
}
Перейти в начало страницы
 
abramcumner
сообщение 08.06.2021, 22:19
Сообщение #417


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Похоже, что у тебя где-то прописан дефайн типа:
# define _WIN32_WINNT 0x0501
Из-за него ошибки, так как в той версии виндовс не было LOAD_LIBRARY_SEARCH_SYSTEM32 и SetDefaultDllDirectories
Перейти в начало страницы
 
Diesel
сообщение 08.06.2021, 22:23
Сообщение #418


Почти Мастер
***********

Репутация:   111  
Группа: Участник
Сообщений: 1158
Награды: 3
Регистрация: 07.08.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


Сейчас пойду проверять на WIN10 проект. Какой то осадок остался от новой Визуалки нехороший.

Цитата(abramcumner @ 09.06.2021, 00:19) *
# define _WIN32_WINNT 0x0501

Точно - где то видел и удалил. Это типа ВИН98?
Перейти в начало страницы
 
abramcumner
сообщение 08.06.2021, 22:28
Сообщение #419


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Diesel @ 08.06.2021, 22:23) *
Цитата(abramcumner @ 09.06.2021, 00:19) *
# define _WIN32_WINNT 0x0501

Точно - где то видел и удалил. Это типа ВИН98?

Win XP
Такой или аналогичной строчкой ты говоришь компилятору, что тебе нужны только функции из определенной версии виндовс. Поэтому функции из более новых версий не найдутся. Нужно найти строчку и удалить, тогда компилятор подставит свою любимую версию виндовс(vs2019 любит вин10).

От того на какой винде собираешь исходники не зависит, только от студии, ну и винсдк.
Перейти в начало страницы
 
Diesel
сообщение 09.06.2021, 15:32
Сообщение #420


Почти Мастер
***********

Репутация:   111  
Группа: Участник
Сообщений: 1158
Награды: 3
Регистрация: 07.08.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


abramcumner, не подскажешь - это из инклудов (если да, то из каких, а то у меня в самом проекте этого много)?:

1>TerrainGIGen.obj : error LNK2005: "double const __cdecl NSH::NLegendre:tongue.gif<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
Перейти в начало страницы
 

22 страниц V  « < 19 20 21 22 >
Ответить в данную темуНачать новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 25.04.2024, 23:11