Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2011, 18:32   #1
EnergyStar
 
Регистрация: 06.08.2011
Сообщений: 5
По умолчанию DirectDraw. Проблема с рисованием в 8-битном режиме

Вообщем вот такой код, который подготавливает DirectDraw и выводит кое что на экран (полный код во вложении):

Код:
	if (FAILED(DirectDrawCreateEx(NULL,(void**)&lpdd,IID_IDirectDraw7,NULL))) return 2;
	if (FAILED(lpdd->SetCooperativeLevel(main_window_handle,
		DDSCL_NORMAL))) return 3;
//		DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX | DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT))) return 3;
	if (FAILED(lpdd->SetDisplayMode(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_BPP,0,0))) return 4;

	memset(&ddsd,0,sizeof(ddsd));
	ddsd.dwSize = sizeof(ddsd);
	ddsd.dwFlags = DDSD_CAPS;
	ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
	if (FAILED(lpdd->CreateSurface(&ddsd,&lpddsprimary,NULL))) return 5;

	palette = new PALETTEENTRY[256];
	for (int i=0; i<64; i++) {
		palette[i].peBlue = i;
		palette[i].peGreen = i;
		palette[i].peRed = i;
		palette[i].peFlags = PC_NOCOLLAPSE;
		palette[127-i].peBlue = i;
		palette[127-i].peGreen = i;
		palette[127-i].peRed = i;
		palette[127-i].peFlags = PC_NOCOLLAPSE;
		palette[128+i].peBlue = i;
		palette[128+i].peGreen = i;
		palette[128+i].peRed = i;
		palette[128+i].peFlags = PC_NOCOLLAPSE;
		palette[255-i].peBlue = i;
		palette[255-i].peGreen = i;
		palette[255-i].peRed = i;
		palette[255-i].peFlags = PC_NOCOLLAPSE;
	} 
	if (FAILED(lpdd->CreatePalette(DDPCAPS_8BIT | DDPCAPS_ALLOW256 | DDPCAPS_INITIALIZE,palette,&lpddpal,NULL))) return 6;
	if (FAILED(lpddsprimary->SetPalette(lpddpal))) return 7;

	memset(&ddsd,0,sizeof(ddsd));
	ddsd.dwSize = sizeof(ddsd);
	if (FAILED(lpddsprimary->Lock(NULL,&ddsd,DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL))) return 8;

	UCHAR *vb = (UCHAR*)ddsd.lpSurface;
	int pitch = ddsd.lPitch;
	for (int y=0; y<SCREEN_HEIGHT; y++)
		for (int x=0; x<SCREEN_WIDTH; x++)
			PutPixel(vb,pitch,x,y,x%256);

	if (FAILED(lpddsprimary->Unlock(NULL))) return 9;
Очевидно что в палитре содержатся только оттенки серого, однако на экран выводятся разноцветные полоски. Подскажите что я делаю не так?
Вложения
Тип файла: rar test.rar (1.8 Кб, 15 просмотров)

Последний раз редактировалось EnergyStar; 26.08.2011 в 18:34.
EnergyStar вне форума Ответить с цитированием
Старый 26.08.2011, 19:35   #2
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

поскольку палитра аттачится к первичной поверхности
Код:
if (FAILED(lpddsprimary->SetPalette(lpddpal))) return 7;
Код:
if (FAILED(lpdd->CreatePalette(DDPCAPS_8BIT | DDPCAPS_ALLOW256 | DDPCAPS_INITIALIZE,palette,&lpddpal,NULL))) return 6;
может DDPCAPS_8BIT | DDPCAPS_ALLOW256 | DDPCAPS_INITIALIZE | DDCAPS_PRIMARYSURFACE поможет?
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 26.08.2011, 19:59   #3
EnergyStar
 
Регистрация: 06.08.2011
Сообщений: 5
По умолчанию

у меня тоже была такая мысль, но в этом случае функция CreatePalette возвращает DDERR_INVALIDPARAMS
EnergyStar вне форума Ответить с цитированием
Старый 27.08.2011, 18:44   #4
EnergyStar
 
Регистрация: 06.08.2011
Сообщений: 5
По умолчанию

так, часть проблемы решалось - в полноэкранном режиме работает уже лучше, однако разноцветные полоски остаются, а именно вместо цветов палитры с индексами - 0-9 и 246-255
кто нибудь знает в чем дело?
EnergyStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рисованием Farrel Qt и кроссплатформенное программирование С/С++ 3 26.05.2011 01:20
Проблема с рисованием в заголовке AndreyPik Win Api 3 22.11.2010 14:47
Проблема с рисованием на канве в TPaintBox pro100-delphi Помощь студентам 10 09.03.2010 19:41
проблема с рисованием сферы kady Помощь студентам 14 25.01.2010 17:48
Проблема с рисованием прямоугольника Юра. Общие вопросы Delphi 13 04.08.2007 06:08