Войти
ФлеймФорумПрограммирование

Общие вопросы по программированию (73 стр)

Страницы: 172 73 74 75141 Следующая »
#1080
11:55, 29 янв. 2020

programina
Можно и так, но кривенько.


#1081
(Правка: 14:56) 14:52, 29 янв. 2020

nes
> В мире розовых поней?
> Как же тогда использовать платформозависимые API в кроссплатформенном
> приложении?

//Device.cpp
#if defined(XBOX)
#include "XboxDevice.inc"
#elif defined(WINDOWS)
#include "WindowsDevice.inc"
#endif
причём единственное место, где эти макросы есть — это там, где инклудятся реализации GAPI объектов, через pimpl. во всём остальном внешнем для девайса коде этих макросов вообще не должно быть.
#1082
14:55, 29 янв. 2020

Suslik
Поинт в том, чтоб IDE автоматически сгенерила эти вот XBOX, Windows, MacOS, ... в зависимости от ОС.

#1083
(Правка: 14:57) 14:57, 29 янв. 2020

nes
> Поинт в том, чтоб IDE автоматически сгенерила эти вот XBOX, Windows, MacOS, ...
> в зависимости от ОС.
они и так автоматически дефайнятся, когда ты указываешь тулсет для CMake'а.

#1084
16:11, 29 янв. 2020

Suslik
Кстати для макоси такой трюк с инклюдами не прокатит,
ибо у них там вся системщина в Obj-C,
а чтоб его подружить с C++,
придется всю реализацию упихнуть в файл с расширением .mm

#1085
(Правка: 16:35) 16:28, 29 янв. 2020

Поясните отсюда:
https://gamedev.ru/flame/forum/?id=249672&page=2&m=5118901#m20

+ Показать

> if (getkensmessagecrc(FP_OFF(kensmessage)) != 0x56c764d4)

gcc (0x56c764d4):
https://rextester.com/ZRLRF75779

clang (0x59a33eb6):
https://rextester.com/UDR74652
https://godbolt.org/z/bzrRt2

#1086
16:59, 29 янв. 2020

programina
>Поэтому кидаешь все зависимое в один файлик в отдельную папку (win/lin/...) и завязываешь с прокрастинацией.
Переосмыслил тут - кажется совсем не плохая идея.
Можно сделать условную сборку, управляемую макросами из какого-нибудь пользовательского конфига.
Типа такого:

// windows__build.cpp
#include "lib_config.h"

#include "generic/..."
#include "windows/..."

#if defined(SOME_CONFIG_OPTIONS)
#include "..."
#endif
// macos__build.mm
#include "lib_config.h"

#include "generic/..."
#include "macos/..."

#if defined(SOME_CONFIG_OPTIONS)
#include "..."
#endif
#1087
(Правка: 17:07) 17:06, 29 янв. 2020

entryway
> gcc (0x56c764d4):
> https://rextester.com/ZRLRF75779
>
> clang (0x59a33eb6):
> https://rextester.com/UDR74652
Хм. С -O0 у clang тоже 0x56c764d4.

#1088
(Правка: 17:09) 17:07, 29 янв. 2020

entryway

(edx >> ecx)
Это UB когда ecx >= 32
#1089
17:17, 29 янв. 2020

entryway
https://rextester.com/QYQ58243
https://godbolt.org/z/wWKG_N

#1090
(Правка: 17:38) 17:37, 29 янв. 2020

return [](){};
Только там 0 наверное, когда равно 32.

Ну а вообще clang тупо пропустил первую итерацию, судя по всему. Увидел edx>>32 и сделал continue, хех. Цикл с 31 дает тот же результат.

#1091
17:40, 29 янв. 2020

entryway
x86 сдвиг же вроде просто берет первые 5 бит, для 32 бит будет тоже самое число, не?

#1092
18:02, 29 янв. 2020

return [](){};
Да, ты прав, тоже самое должно быть.

#1093
22:21, 29 янв. 2020

Какие математика-векторы в ваших энжинах?

1. Не по феншую стандарту

class Vector3f
{
public:

  union
  {
    struct
    {
      float x;
      float y;
      float z;
    };

    float data[3];
  };
  ...
};

2. Криповенько

class Vector3f
{
public:

  float data[3];

  float X() const noexcept;
  void SetX(float value) noexcept;
  
  float Y() const noexcept;
  void SetY(float value) noexcept;
  
  float Z() const noexcept;
  void SetZ(float value) noexcept;
  ...
};

3. Убешненько

class Vector3f
{
public:

  float x;
  float y;
  float z;

  const float* GetData() const noexcept
  {
    return &x;
  }
  ...
};

#1094
(Правка: 0:20) 0:12, 30 янв. 2020

4. Всё или ничего.

struct FXmmQuad
{
    __m128 m;

    FXmmQuad();
    FXmmQuad(__m128 mm);
    FXmmQuad(float x, float y, float z, float w);
    void unpack(float& x, float& y, float& z, float& w) const;
    void unpack(float& x, float& y, float& z) const;
};

struct FPoint: FXmmQuad
{
    FPoint();
    FPoint(__m128 mm);
    FPoint(float x, float y, float z);
};

struct FDisp: FXmmQuad
{
    FDisp();
    FDisp(__m128 mm);
    FDisp(float x, float y, float z);
};

struct FMat
{
    __m128 ma;
    __m128 mb;
    __m128 mc;

    FMat();
    FMat(
        float xx, float xy, float xz, float xw,
        float yx, float yy, float yz, float yw,
        float zx, float zy, float zz, float zw);
    FMat(
        float xx, float xy, float xz,
        float yx, float yy, float yz,
        float zx, float zy, float zz);
    static FMat basis(FDisp const& x, FDisp const& y, FDisp const& z, FPoint const& w);
    static FMat identity();
    void unpackptr(FDisp* xp, FDisp* yp, FDisp* zp, FPoint* wp) const;
    FDisp xunit() const;
    FDisp yunit() const;
    FDisp zunit() const;
    FPoint origin() const;
    void disassemble(float* f) const;
    static FMat assemble(float const* f);
};

5. Ничего. xyz не нужны.

Правда, в этой программе пространственных векторов нигде и не было, вся линейная алгебра применяется исключительно в контексте фазовых пространств.
template< typename T, size_t size >
struct vector
{
  std::array< T, size > elems;

  T& operator()( size_t index )
  {
    return elems[ index ];
  }

  T const& operator()( size_t index ) const
  {
    return elems[ index ];
  }
};
Страницы: 172 73 74 75141 Следующая »
ФлеймФорумПрограммирование