1. C++ / Говнокод #7444

    +152

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    if (getMaterialDom().ztest_)
     {
      device.SetRenderState(D3DRS_ZENABLE, TRUE);
      device.SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL);
     }
     else
      device.SetRenderState(D3DRS_ZENABLE, FALSE);
    
    if (getMaterialDom().zwrite_)
    	device.SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
    else
    	device.SetRenderState(D3DRS_ZWRITEENABLE, FALSE);

    Реализация параметров материала z-test и z-write в 3D-движке.

    Запостил: Kirinyale, 04 Августа 2011

    Комментарии (30) RSS

    • что не так?
      Ответить
      • По крайней мере 9-12 можно превратить в одну.
        И, кстати, почему TRUE/FALSE, а не ZTRUE/ZFALSE true/false ?
        Ответить
        • мой союзник тупит
          const auto material=getMaterialDom();
          const bool zt=material.ztest_;
          device.SetRenderState(D3DRS_ZENABLE, zt);
          if(zt) device.SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL);
          device.SetRenderState(D3DRS_ZWRITEENABLE, material.zwrite_);
          Ответить
          • а почему не сразу const bool zt = getMaterialDom().ztest?
            Ответить
            • explaining var головного мозга
              Ответить
            • Я написал так, чтобы когда придёт тарас - мне не пришлось бы оправдываться.
              Его дельфи неумеет elimination expression, поэтому, как он говорит: "Всегда нужно кешировать в переменные".
              Ответить
          • >мой союзник тупит
            гусь свинье не товарищ
            Ответить
          • >const auto
            Разве можно const ставить перед auto в С++0х?
            Ответить
            • А почему нет?
              Ответить
              • кстати, интересно, если функция возвращает const int&, и ее результат присваивается переменной, объявленной как const auto, получается как бы двойная константность :)
                Ответить
        • >почему TRUE/FALSE?
          Микрософт эту глупость со времен винапи пропагандируют до сих пор во всех своих геймдейвских примерах для DX.
          Ответить
        • Ваш второй вопрос даёт ясно понять, что 9-12 объединить нельзя.
          Что такое TRUE и FALSE по выдранному постером куску кода нам не ясно. Это могут быть константы неизвестного типа, это могут быть ключевые слова перечисления и даже макросы. Кажется, что последнее наиболее вероятно и за TRUE/FALSE кроются страшные, "изпальцавысосанные" целочисленные коды.
          Ответить
          • а теперь вспоминаем про тернистый оператор:
            device.SetRenderState(D3DRS_ZWRITEENABLE, getMaterialDom().zwrite_ ? TRUE : FALSE);
            Ответить
          • да, в winbase.h TRUE и FALSE определены, как int :(
            но SetRenderState принимает BOOL, что определён как int, да :)
            Из этого вывод: :(

            А сделали они это для поддержки WIN API в pure Си.

            Я слышал, что DX можно программировать под pure Си без С++ враперов. Кто-нибудь пробовал?
            Ответить
        • 01-07 также можно сократить:

          device.SetRenderState(D3DRS_ZENABLE, getMaterialDom().ztest_);
          if (getMaterialDom().ztest_) device.SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL);
          Ответить
        • 1-7 объясняют, почему это делать не стоит.
          Ответить
      • z-write без z-test работать не будет. Потому что D3DRS_ZENABLE при выключении убивает вообще всё, связанное с буфером глубины.
        Вместо 07 нужно было:
        device.SetRenderState(D3DRS_ZFUNC, D3DCMP_ALWAYS);

        Копаться, чтобы найти, почему не работал один материал, пришлось долго. Вторая ошибка дебага: думать, что чужой код работает правильно. (с)
        Ответить
    • Что-за игра то?
      Ответить
      • Домики деревянные, эльфы набигают, я уже джва года жду такую игру. :(
        Можно грабить корованы.
        Ответить
        • грабить корованы можно?
          .
          ████████████████████
          ░░░░░░░░░░░░░░░█
          ░░███░░░░░░░███░█
          ░█░░░█░░░░░█░░░█░█
          ░░░░░░░░░░░░░░░░░█
          ░░███░░░░░░░███░░█
          ░█░░░█░░░░░█░░░██
          █░░░███░░░█░░░███
          █░░████░░░█░░████
          █░░░███░░░█░░░███
          ░█░░░█░░░░░█████
          ░░███░░░░░█░░░░░██
          ░░░░░░░░░░░░░░░░░█ █
          ░░██░░░░██░░░░░░░░███
          ░░░████████░░░░░░░███
          ░░░░████████░░░░░███
          ░░░░░░████████████
          ░░░░░░░░░░░░░░░█
          ░░░░░░░░░░░████
          ░░░░░░░░░░░░█
          ░░░░░░░░░░░█
          ░░░░░░░
          ░░░░░░░░░▄▄▄▄
          Ответить
      • очередное HO/Adventure для бигфиша
        Ответить

    Добавить комментарий