|
DirectX. Отрисовка битмапов
|
|||
---|---|---|---|
#18+
Достался мне в наследство код, который должен рисовать битмапы в окне. Проблема в том, что он работает через пень-колоду. Может отрисовать все, может только угол битмапа, а может оставить пустое окно. В DirectX я ноль. Может, кто тыкнет носом в ошибку? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
При этом если я сохраняю этот битмап в файл Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
По симптомам очень похоже на гонку потоков. Но вроде доступа из разных потоков быть не должно, а DoPaint точно вызывается только в главном потоке. Или DirectX не видит то, что область изменилась. С уважением, Vasilisk ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2021, 23:36 |
|
DirectX. Отрисовка битмапов
|
|||
---|---|---|---|
#18+
Надо смотреть, что делается в DrawMapObject, как получен MapID3DSurface. В целом странный код. DirectX используется только для вывода битмапа с альфа-блендингом? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2021, 03:27 |
|
DirectX. Отрисовка битмапов
|
|||
---|---|---|---|
#18+
Sapersky Надо смотреть, что делается в DrawMapObject Sapersky как получен MapID3DSurface. Код: pascal 1.
Sapersky DirectX используется только для вывода битмапа с альфа-блендингом? Я все больше слоняюсь к мысли, что _Vasilisk_ DirectX не видит то, что область изменилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2021, 16:16 |
|
DirectX. Отрисовка битмапов
|
|||
---|---|---|---|
#18+
Это довольно экзотическая смесь DirectX и GDI. Бэкбуфер очищается через DirectX, потом в него пихается картинка через GDI, потом опять рисование через DirectX. Мои соболезнования писателям видеодрайверов... Если проблема точно не в параметрах VisRect.mrWidth, VisRect.mrHeight - попробуй убрать очистку (FD3DDevice.Clear). Она и не нужна по идее, если битмап занимает всё окно. При неправильном рисовании - всё остальное кроме подложки рисуется? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2021, 18:59 |
|
DirectX. Отрисовка битмапов
|
|||
---|---|---|---|
#18+
Sapersky попробуй убрать очистку (FD3DDevice.Clear). Sapersky При неправильном рисовании - всё остальное кроме подложки рисуется? Sapersky Если проблема точно не в параметрах VisRect.mrWidth, VisRect.mrHeight Код: pascal 1. 2.
Также все вызовы обернул в OleCheck, а вызов StretchDIBits в Win32Check - ничего не изменилось. Причем те места, где ничего не рисуется отображается не белым фоном, а clBtnFace Sapersky Бэкбуфер очищается через DirectX, потом в него пихается картинка через GDI, потом опять рисование через DirectX ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2021, 19:28 |
|
DirectX. Отрисовка битмапов
|
|||
---|---|---|---|
#18+
_Vasilisk_ Причем те места, где ничего не рисуется отображается не белым фоном, а clBtnFace Попробуй указать конкретный хэндл в 3-м параметре Present. Или можно попробовать InvalidateRect на окно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2021, 00:12 |
|
DirectX. Отрисовка битмапов
|
|||
---|---|---|---|
#18+
Sapersky Тогда наверное проблема на этапе копирования бэкбуфера на экран (FD3DDevice.Present). Было Код: pascal 1. 2. 3. 4. 5.
стало Код: pascal 1. 2. 3. 4. 5.
clBtnFace навел на мысль ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2021, 10:44 |
|
|
start [/forum/topic.php?fid=58&msg=40117508&tid=2036810]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 151ms |
0 / 0 |