![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Ingvar Riga |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 31.3.2004 Репутация: нет Всего: нет |
Необходимо пообщаться с человеком, кторый работает в данной связке. Проблема в том, что код реализованный на Delphi работает, а прямой его перевод (правильный) на С++ Builder не работает.
Такое впечатление, что некоторые функции OpenGL срабатывают только один раз. (glClear, glViewport...). Я только начинаю изучать OpenGL и требуется помощь. Кто-нибудь в состоянии? Предложения перейти на Делфи не рассматриваются из-за специфики работы. |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
ну дык компилятор тут не причем
ченить с вызовом функ напутал -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Ingvar Riga |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 31.3.2004 Репутация: нет Всего: нет |
Вот фокусы! Чем различается код на Delphi и код на C++ Builder?
Кроме языка реализации, конечно. Однако Паскалевский работает а Cишный НЕТ! Уличите меня в ошибках! //----------------------------------------------------------------- unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OpenGL; type TfrmGL = class(TForm) procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); procedure FormDestroy(Sender: TObject); private hrc: HGLRC; end; var frmGL: TfrmGL; implementation {$R *.DFM} procedure TfrmGL.FormPaint(Sender: TObject); begin wglMakeCurrent(Canvas.Handle, hrc); glViewPort (0, 0, ClientWidth, ClientHeight); // область вывода glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета glPointSize (20); // размер точек glColor3f (1.0, 0.0, 0.5); // текущий цвет примитивов glBegin (GL_POINTS); // открываем командную скобку glVertex2f (-1, -1); glVertex2f (-1, 1); glVertex2f (0, 0); glVertex2f (1, -1); glVertex2f (1, 1); glEnd; // закрываем командную скобку SwapBuffers(Canvas.Handle); // содержимое буфера - на экран wglMakeCurrent(0, 0); end; procedure SetDCPixelFormat (hdc : HDC); var pfd : TPixelFormatDescriptor; nPixelFormat : Integer; begin FillChar (pfd, SizeOf (pfd), 0); pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER; nPixelFormat := ChoosePixelFormat (hdc, @pfd); SetPixelFormat (hdc, nPixelFormat, @pfd); end; procedure TfrmGL.FormCreate(Sender: TObject); begin SetDCPixelFormat(Canvas.Handle); hrc := wglCreateContext(Canvas.Handle); end; procedure TfrmGL.FormDestroy(Sender: TObject); begin wglDeleteContext(hrc); end; end. //----------------------------------------------------------------- С++ Builder: //----------------------------------------------------------------- void __fastcall SetDCPixelFormat ( HDC hdc ) { PIXELFORMATDESCRIPTOR pfd; int nPixelFormat; memset(&pfd, 0x0, sizeof (pfd)); pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; nPixelFormat = ChoosePixelFormat (hdc, &pfd); SetPixelFormat (hdc, nPixelFormat, &pfd); } void __fastcall TForm1::FormCreate(TObject *Sender) { SetDCPixelFormat(Canvas->Handle); hrc = wglCreateContext(Canvas->Handle); } void __fastcall TForm1::FormDestroy(TObject *Sender) { wglDeleteContext(hrc); } void __fastcall TForm1::FormPaint(TObject *Sender) { wglMakeCurrent(Canvas->Handle, hrc); glViewport (0, 0, ClientWidth, ClientHeight); // область вывода glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета glPointSize (20); // размер точек glColor3f (1.0, 0.0, 0.5); // текущий цвет примитивов glBegin (GL_POINTS); // открываем командную скобку glVertex2f (-1, -1); glVertex2f (-1, 1); glVertex2f (0, 0); glVertex2f (1, -1); glVertex2f (1, 1); glEnd; // закрываем командную скобку SwapBuffers(Canvas->Handle); // содержимое буфера - на экран wglMakeCurrent(0, 0); } //--------------------------------------------------------------------------- В общем ситуация такова: Код должен рисовать окошко заполненное голубоватым цветом и с 5 точками. (Это просто пример). При изменении размера окна соответственно перерисовывается вся картинка. На Delphi усЁ в порядке. На Билдере нет. Рисуется основное окно заполненное цветом. Точек нет. При изменении размеров начинаются тормозюльки отрисовки окна и системы в целом. Чувствуется ошибка - но В ЧЕМ ИМЕННО?! Кстати во всех примерах для С++Builder отрисовка производится через тики таймера. Это что за фокус? |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Вроде все правильно(На пример из Краснова похоже
Вот тебе один из примеров:
Это сообщение отредактировал(а) <Spawn> - 22.7.2004, 21:58 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Ingvar Riga |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 31.3.2004 Репутация: нет Всего: нет |
Краснов и есть. Хорошая книженция - не жалею что потратился.
А кстати ошибочка - элементарна. Сам нашел.... и порвал все волосы на шляпе... Вместо glEnd(); у меня написано glEnd; компилятор - гад |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |