Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DirectDraw 
:(
    Опции темы
Rave4Life
Дата 14.8.2007, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.8.2007

Репутация: нет
Всего: нет



Всем привет)

Я пишу на Делфи программку, которая работает с DirectDraw. Суть программы - полупрозрачная прорисовка окна (AlphaBlending) с помощью средств DirectX, но не используя API функции типа SetLayeredWindow.
Создавать Primary Surface, работать напрямую с видеопамятью я научился. Но вот "заставить" окно моей программы прорисовываться не в основной области (PrimarySurface), а на другой, я не могу. Помогите пожалуйста  найти способ это сделать. Заранее благодарен)))
PM MAIL   Вверх
Bitter
Дата 16.8.2007, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 6
Всего: 27



Вот инициализация DirectX:

Код

procedure TForm1.FormCreate(Sender: TObject);
var
    ddsd:TDDSurfaceDesc2;
    ddscaps : TDDSCaps2;
begin
 MainObj:=nil;
 MainSur:=nil;
 BackSur:=nil;

 DirectDrawCreateEx(nil,MainObj,IDirectDraw7,nil);
 MainObj.SetDisplayMode(1024,768,32,0,0);
 MainObj.SetCooperativeLevel(Handle,DDSCL_FULLSCREEN or DDSCL_EXCLUSIVE);

 ZeroMemory(@ddsd,SizeOf(ddsd));
  with ddsd do 
  begin
   dwSize := SizeOf(ddsd);
   dwFlags := DDSD_CAPS or DDSD_BACKBUFFERCOUNT; // Включаем бэк буфер
   ddsCaps.dwCaps := DDSCAPS_PRIMARYSURFACE or DDSCAPS_FLIP or DDSCAPS_COMPLEX;
   dwBackBufferCount := 1; // Количество бэк буферов
  end;

 res:=MainObj.CreateSurface(ddsd,MainSur,nil);   // Создаем первичную поверхность

 ZeroMemory(@ddscaps, SizeOf(ddscaps));
 ddscaps.dwCaps := DDSCAPS_BACKBUFFER;
 res:=MainSur.GetAttachedSurface(ddscaps, BackSur);  // Создаём вторичную поверхность (бэк буфер)
end;


Вот рендер:

Код

procedure TForm1.UpdateFrame;
begin
 BackSur.BltFast(0,0,FonSur,nil,DDBLTFAST_WAIT);
 MainSur.Flip(BackSur,DDFLIP_WAIT);
end;


А вообще старайся избегать DIrectDraw. Делай всё в Direct3D

Это сообщение отредактировал(а) Bitter - 16.8.2007, 22:39
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0385 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.