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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2009, 15:56   #1
Sergeevich
Пользователь
 
Регистрация: 26.05.2008
Сообщений: 30
Восклицание Контекст воспроизведения OpenGL

Каким образом можно сделать не форму, а панель холстом ? Тоесть я добавляю на форму компонент Panel1, как сделать чтобы именно в ней отображались все мои команды openGL ?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OpenGL, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
     hrc : HGLRC ;
     dc:hdc;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  procedure SetDCPixelFormat( hdc : HDC );

implementation


{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

SetDCPixelFormat( form1.Canvas.Handle );
hrc := wglCreateContext ( form1.Canvas.Handle );
dc:=GetDC(hrc);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
wglDeleteContext(hrc);
ReleaseDC(hrc,dc);
DeleteDC(dc);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
wglMakeCurrent ( form1.Canvas.Handle , hrc );
glClearColor ( 0.5 , 0.5 , 0.5 , 1.0 ); { цвет фона }
glClear ( GL_COLOR_BUFFER_BIT ); { очистка буфера цвета }
//--------------ТОЧКА-------
{
glPointSize ( 30 );
glColor3f ( 1.0 , 0.0 , 0.0 );
glBegin ( GL_POINTS );
glVertex2f ( -1 , 1 );
glEnd;
}
//--------------ЛИНИЯ-------
{
glColor3f ( 1.0 , 0.0 , 0.0 );
glLineWidth ( 20.0 );
glBegin ( GL_LINES );
glVertex2f ( 0.0 , 0.0 );
glVertex2f ( 0.0 , -0.5 );
glEnd;
}
//----------------------------------------
wglMakeCurrent ( 0 , 0 );
end;


procedure SetDCPixelFormat ( hdc : HDC );
var
pfd : TPixelFormatDescriptor;
nPixelFormat : Integer;
begin
FillChar (pfd, SizeOf (pfd), 0);
nPixelFormat := ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;


procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
caption:='X= '+inttostr(x)+'  Y= '+inttostr(y);
end;

end.
Sergeevich вне форума Ответить с цитированием
Старый 08.11.2009, 16:07   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Код:
DC:= GetDC(panel.handle);
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.11.2009, 16:51   #3
Sergeevich
Пользователь
 
Регистрация: 26.05.2008
Сообщений: 30
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
Код:
DC:= GetDC(panel.handle);
Делал так, не помогает. Что именно мне нужно изменить в коде ?
Sergeevich вне форума Ответить с цитированием
Старый 08.11.2009, 16:58   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

вот это
Код:
SetDCPixelFormat( form1.Canvas.Handle );
hrc := wglCreateContext ( form1.Canvas.Handle );
dc:=GetDC(hrc);
надо так... как вариант
Код:
DC:= GetDC(handle);

 FillChar(pfd,SizeOf(pfd),0);
 with pfd do begin
  nSize     := sizeof(pfd);
  nVersion  := 1;
  dwFlags   := PFD_DRAW_TO_WINDOW or
               PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER
               or PFD_GENERIC_ACCELERATED ;
  iPixelType:= PFD_TYPE_RGBA;
  cColorBits:= 32;
  cDepthBits:= 32;
  iLayerType:= PFD_MAIN_PLANE;
 end;
 nPixelFormat:= ChoosePixelFormat(DC, @pfd);
 SetPixelFormat(DC,nPixelFormat,@pfd);
 hrc:= wglCreateContext(DC);
 wglMakeCurrent(DC, hrc);
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.11.2009, 17:16   #5
Sergeevich
Пользователь
 
Регистрация: 26.05.2008
Сообщений: 30
По умолчанию

Не работает
Sergeevich вне форума Ответить с цитированием
Старый 08.11.2009, 17:20   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

юзаем поиск, находим готовый исходник
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.11.2009, 21:50   #7
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

http://programmersforum.ru/showthread.php?t=67690
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Продолжение воспроизведения, bass.dll BredoZavR Мультимедиа в Delphi 4 06.06.2009 18:46
Время воспроизведения песни Волк Мультимедиа в Delphi 8 02.06.2009 22:35
OpenGL prizrak1390 Свободное общение 2 07.04.2008 13:43
Ошибка после воспроизведения mp3-мелодий Митяй2 Мультимедиа в Delphi 14 21.10.2007 11:30
проблемы воспроизведения видео _Solomon_ HTML и CSS 0 20.04.2007 08:50