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

Потестируйте 1000 кубов на плавность [завершено, итоги в сообщении #72, всем спасибо] (4 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 1 2 3 4 5 6 Следующая »
#45
(Правка: 14:53) 14:46, 15 фев. 2019

В winquake пацаны заюзали стороннюю либу и не парились.
https://github.com/defunkt/quake/tree/master/WinQuake/scitech
https://github.com/defunkt/quake/blob/master/WinQuake/vid_win.c#L2224

По умолчанию оно вроде через ddraw, или может только в фулскрине, хз в общем, лень копать. Есть параметр -noddraw


#46
14:52, 15 фев. 2019

entryway
> В winquake пацаны заюзали стороннюю либу и не парились.
Хм, а может сделать так же...

#47
(Правка: 14:58) 14:53, 15 фев. 2019

1 frag / 2 deaths
Faceroll
Если кто-то заинтересован отправить разрабам сдл2 репорт о баге, вот инфа о том как я выводил картинку в данном тесте.

// INI STAGE
// create wnd
//
window = SDL_CreateWindow(ENAME, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, nowx, nowy, SDL_WINDOW_SHOWN);
if (nowx==ResX && nowy==ResY){SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN);}

// INI STAGE
// ini render
//
renderer_2daccel = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
texture_2daccel = SDL_CreateTexture(renderer_2daccel, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, nowx, nowy); 


// EACH FRAME CALL
// ScreenH - is already soft-rendered picture for output
//
SDL_UpdateTexture(texture_2daccel, NULL, (const void*)(ScreenH), xsiz*4);
SDL_RenderCopy(renderer_2daccel, texture_2daccel, NULL, NULL);
SDL_RenderPresent(renderer_2daccel);
#48
15:03, 15 фев. 2019

122
Давай дему с MGLLT.LIB

#49
15:07, 15 фев. 2019

1 frag / 2 deaths
> Давай дему с MGLLT.LIB
Впервые слышу.
Что это?

#50
15:19, 15 фев. 2019

122
Верхнее сообщение на этой странице.

#51
(Правка: 16:03) 15:59, 15 фев. 2019

122
> SDL_CreateRenderer

Эмммм, ты тут задействуешь оверкилл 3D-accelerated. На винде у меня оно превращается в вызовы D3D9.
Просто блиттить на окно достаточно Surface-ов и по идее может даже быстрее должно быть, т.к. рендер в Texture это ты сперва перегоняешь свой софт-буфер в видеопамять как в текстуру для 3D и потом уже происходит рисовка очередью команд в два триангла на экран.
Блиттинг сюрфейса же на окно по идее должен обходится софтачом из DirectDraw без всяких промежуточных перегонок туда-сюда. Хотя я не на 100% уверен, но вроде бы всё так.
P.S.
При этом тебе прямо в сюрфейс и надо рендерить.

#52
16:06, 15 фев. 2019

=A=L=X=
> Просто блиттить на окно достаточно Surface-ов
Именно так.

> и по идее может даже быстрее должно быть
Тоже верно.

> оверкилл
А вот тут нет.
Об этом собственно - тест в этой теме.
Тест показал - подлагивает. Чтобы лагов не было требуется именно 3D-accelerated.
Значит не оверкилл а необходимость.
Даже ценой потери части быстродействия.

> DirectDraw
Не поддерживается.
Не переносим.

#53
(Правка: 16:11) 16:09, 15 фев. 2019

122
> > DirectDraw
> Не поддерживается.
> Не переносим.

Я не про то, что надо делать через DirectDraw, а про то, что если ты не будешь вовлекать D3D9 используя Renderer, то SDL сам откатится к DirectDraw в своих кишках.
Тебе ничего делать не надо будет.
А сейчас этот код работает через Direct3D9.

#54
16:18, 15 фев. 2019

=A=L=X=
> то SDL сам откатится к DirectDraw в своих кишках.
Вот: 15.02.2019 SDL2-SURF 1kcubes
Два файла, sdl2-x32 v2.0.8 и тест через его SURFACE.
Подлагивания останутся. Ровно те же какие есть и в win-api версии.

+ Показать

Через surface лагает ровно так же как и через gdi.
#55
16:22, 15 фев. 2019

Немного порылся в кишках и уже не вижу использования DirectDraw в SDL2.
Походу DirectDraw остался в SDL 1.x.
Там сейчас такой фарш от каких то DirectFB до Vulkan и вообще непонятно что используется в случае простых сюрфейсов. Когда Renderer используешь у него есть прямо метод "покажи какое двигло скрывается сейчас под капотом" - и у меня оно возвращало D3D9 (возможно 8).
А без него может статься там GDI сейчас и используется. xD

#56
16:26, 15 фев. 2019

Код из SDL2/src/video/windows/SDL_windowsframebuffer.c

int WIN_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch)
{
    SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
    size_t size;
    LPBITMAPINFO info;
    HBITMAP hbm;

...

    /* The second call to GetDIBits() fills in the bitfields */
    hbm = CreateCompatibleBitmap(data->hdc, 1, 1);
    GetDIBits(data->hdc, hbm, 0, 0, NULL, info, DIB_RGB_COLORS);
    GetDIBits(data->hdc, hbm, 0, 0, NULL, info, DIB_RGB_COLORS);
    DeleteObject(hbm);

Изображение
#57
16:44, 15 фев. 2019

Вообще странно, что у кого-то что-то подлагивает. У меня код с 2D на SDL_Renderer с VSync идеально скроллит поле. Там нечему подлагивать так то.

#58
(Правка: 16:55) 16:48, 15 фев. 2019

122

P.S.
А, у тебя еще код немного некорректный - ты же используешь таргет-текстуры, значит надо при инициализации рендерера ставить еще флаг SDL_RENDERER_TARGETTEXTURE, а не только указанные тобой. И сама текстура - то же самое. Хотя если бы не, то вообще бы наверное не работало бы.

#59
16:50, 15 фев. 2019

DDraw начиная с висты тоже эмулируется через d3d, местами криво и тормозно

Страницы: 1 2 3 4 5 6 Следующая »
ФлеймФорумПрограммирование