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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2010, 02:30   #1
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию Проблема с движком на OpenGL

По идее, форма должна быть фиолетовой. Но при запуске она то фиолетовая, то никакая (серая то бишь).
Собственно, код:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  EInit(100,100);
  ESetContext(Canvas.Handle);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  EPaint;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
  FormPaint(Sender);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  FormPaint(Sender);
end;

end.
Код:
unit Engine2D;

interface

  uses Windows;

  type

    TColor = LongWord;

  procedure EInit(BufferWidth, BufferHeight: Word);
  procedure ESetContext(_DC: HDC);
  procedure EPaint;

implementation

  uses OpenGL;

  var
    BWidth, BHeight: Integer;
    HRC: HGLRC;
    DC: HDC;

  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 EInit(BufferWidth, BufferHeight: Word);
  begin
    BWidth:=BufferWidth;
    BHeight:=BufferHeight;
  end;

  procedure ESetContext(_DC: HDC);
  begin
    DC:=_DC;
    SetDCPixelFormat(DC);
    HRC:=wglCreateContext(DC);
  end;

  procedure EPaint;
  begin
    wglMakeCurrent(DC,HRC);
    glViewPort(0,0,BWidth,BHeight);
    glClearColor(0.5,0.5,1,1);  // - фиолетовый
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1,0,0);
    glBegin(GL_TRIANGLES);
      glVertex2f(-1,0);
      glVertex2f(-1,0.5);
      glVertex2f(0,0);
    glEnd;
    SwapBuffers(DC);
    glFinish;
    glFlush;
    wglMakeCurrent(0,0);
  end;

end.
Форматируйте код, будьте людьми.

Последний раз редактировалось Granus; 10.01.2010 в 02:33.
Granus вне форума Ответить с цитированием
Старый 10.01.2010, 02:35   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

pf.nSize=sizeof(pf);
pf.nVersion=1;
pf.cDepthBits=32;
pf.iLayerType=PFD_MAIN_PLANE;
pf.dwFlags=PFD_DRAW_TO_WINDOW+PFD_S UPPORT_OPENGL+PFD_GENERIC_ACCELERAT ED;

структуру pfd заполните по примеру.(pf это ваша pfd, код мой с С++ поэтому там = а не :=)

выделил две вещи что наиболее важно(точнее вообще нужно)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 10.01.2010 в 02:40.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.01.2010, 12:13   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

заполнил, ничего не изменилось: то работает, то нет. вообще в чем может быть причина такого странного поведения?
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 10.01.2010, 12:42   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
    SwapBuffers(DC);
уберите ка...нее вижу у вас включенной буферизации.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.01.2010, 12:56   #5
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

опять то же самое
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 10.01.2010, 13:28   #6
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
По умолчанию

Во первых я точно знаю что фон задается при инициализации а не каждый раз при прорисовке
Код:
 {... тут код инициализации и прочая ерунда}
  HRC:=wglCreateContext(DC);
  wglMakeCurrent(DC,HRC);
  glClearColor (0.5,0.5,1,1); // цвет фона
Для изменений цвета при рисовании по-моему используются команды типа glColor3f
Далее бла бла бла, и в самой процедуре рисования у меня
Код:
 BeginPaint(HND,ps);
   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
   glLoadIdentity;

   {далее пишется код чего там надо рисовать}

   SwapBuffers(DC);
 EndPaint(HND,ps);
Вот так точно всё работает
Simply-Art вне форума Ответить с цитированием
Старый 10.01.2010, 15:35   #7
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

ну, где устанавливать цвет фона ему точно без разницы)
а вот отличия Вашего кода от моего я не вижу =\
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 10.01.2010, 15:37   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а скиньте свой ЕХЕ.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.01.2010, 15:50   #9
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

пооткрывайте раз 20
Вложения
Тип файла: rar Project1.rar (154.0 Кб, 9 просмотров)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 10.01.2010, 15:54   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

перерисовки нет.
попробуйте сами ловить WM_PAINT и там уже перерисовывать через InvalidateRect
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenGL: проблема с цветом N!ckeL Общие вопросы Delphi 5 10.01.2010 15:14
Проблема с проектом в OpenGL 30MBU Помощь студентам 4 12.10.2009 14:44
OpenGL проблема с подсчетом FPS AS10 Мультимедиа в Delphi 4 15.09.2009 21:17
проблема с движком cstrike_svlist Nexus2116 Свободное общение 1 27.06.2009 00:53
Помогите с движком!!! Руслантус Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 28.07.2007 13:14