“Эксклюзивная” палитра DirectDraw не на самом деле эксклюзивна

Еще одна альтернатива

for(String serverId : serverIds) {
   sb.append(",");
   sb.append(serverId); 
}
sb.deleteCharAt(0);
5
задан Vladimir Panteleev 30 June 2009 в 13:04
поделиться

3 ответа

Очевидно «приложение не должно вызывать SetSystemPaletteUse, если оно не имеет развернутое окно и фокус ввода» . Возможно какая-то другая программа плохо себя ведет. Такое описание очень похоже на то, что Microsoft надеется, что все программы будут сотрудничать, и не предлагает способа заставить их к этому. Это как вернуться в Windows 3.1. :)

Случайное предложение: пробовали ли вы SetSystemPaletteUse с параметром SYSPAL_NOSTATIC256?

Вы также можете увидеть, содержит ли ваша палитра 20 зарезервированных цветов Windows; если это так, это означает, что любой другой программе с палитрой, которая просто использует цвета Windows, не нужно будет изменять палитру, чтобы отрисовать себя, насколько я понимаю.

0
ответ дан 15 December 2019 в 01:09
поделиться

Вы можете сделать «простой» обходной путь. Поскольку ваша игра - старая игра, она, вероятно, не соответствует текущему оборудованию, поэтому этот трюк будет работать:

  • Преобразовать все в закадровый буфер (память)
  • преобразовать 8-битный буфер в 16-битный (или 32-битный) ) с использованием текущей палитры (это также делается в памяти)
  • скопируйте содержимое 16-битного (или 32-битного) буфера в задний буфер экрана
  • переверните экранный буфер.

Это потребует минимальных изменений в вашей игре, и полностью избавиться от проблем с палитрой, хотя ваша игра по-прежнему может использовать все свои хитрости с палитрой

R

3
ответ дан 15 December 2019 в 01:09
поделиться

Я вообще не знаю DirectX, но я бы предложил попробовать сделать рендеринг за пределами экрана, а затем преобразовать в глубину дисплея ... Я полагаю, что вы можете заставить Direct2D сделать все это за вас...

0
ответ дан 15 December 2019 в 01:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: