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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2011, 17:15   #1
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию Мерцание моих проектов на отличных машинах от моей

Добрый день. Я ни разу не задумывался над тем, что мои проекты не отображаются на некоторых компьютерах. Попробую рассказать всю свою историю. Введу краткие обозначения: (Д1) - 1-ый друг, (Д2)-Второй.
У Д1 конфигурация компьютера схожа с моим. У Д2 машина в половину слабее наших. Но дело не в этом. Я сейчас пишу графическое приложение на OpenGL(не буду скрывать, что это игрушка). У меня все работает отлично, у Д1 тоже, но вот у Д2 серый экран(цвет тот, который задан у формы(Form1.Color)). Иногда проскакивает картинка. Я решил откомпилировать ее у него на компьютере, но это действие оказалось бесполезным. Добавил в процедуру рисования glfinish, попробовал увеличить интервал таймера с процедурой refresh - ничего. Кстати, добавлю что при обоих условиях изображение иногда мелькало(но один раз и его практически невидно). Рискнул поставить интервал равным 5000 и сделал открытие. Картинка держалась 5 сек и при перерисовке моргала(появлялся цвет формы). Я решил создать новое приложение с простым цветным квадратом. Все равно с интервалом 100 мелькания продолжались. Я подумал, что проблемы с драйверами, но нет, Counter - Strike Source работает. Следовательно это моя ошибка. Прошу вас указать эту ошибку. Я выкладываю тот самый цветной квадрат, который работает у меня, но не работает у Д2.
Заранее благодарю.
P.S. ОС у нас одинаковые. Плюс ко всему эти мерцания продолжаются на компьютерах в кабинете информатики.
Вложения
Тип файла: zip Bag.zip (197.4 Кб, 19 просмотров)

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 16.10.2011, 09:28   #2
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Ладно я выложу исходный код, и вы посмотрите, может там где-то есть ошибка. Возможно, смутил вас своим рассказом.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    DC:HDC;
    hrc:HGLRC;
    procedure PixelFormat;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
DC:=GetDC(Handle);
PixelFormat;
hrc:=wglCreateContext(DC) ;
wglMakeCurrent(DC,hrc);
end;

procedure TForm1.PixelFormat;
var
nPixelFormat:integer;
tpfd:TPixelFormatDescriptor;
begin
FillChar(Tpfd,SizeOf(Tpfd),0);
Tpfd.nSize:=SizeOf(Tpfd);
Tpfd.nVersion:=1;
Tpfd.dwFlags:=PFD_DOUBLEBUFFER+PFD_DRAW_TO_WINDOW+PFD_SUPPORT_OPENGL;
Tpfd.iPixelType:=PFD_TYPE_RGBA;
Tpfd.iLayerType:=PFD_MAIN_PLANE;
nPixelFormat:=ChoosePixelFormat(DC,@Tpfd);
if nPixelFormat<>0 then SetPixelFormat(DC,npixelformat,@tpfd);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=VK_ESCAPE then close;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
ps:TPaintStruct;
begin
beginPaint(DC,ps);
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);
glViewPort(0,0,Form1.Width,Form1.height);

glBegin(GL_Quads);
glColor3f(1,0,1);
glvertex2f(0.5,0.5);
glColor3f(1,0,0);
glvertex2f(-0.5,0.5);
glColor3f(0,1,0);
glvertex2f(-0.5,-0.5);
glColor3f(0,0,1);
glvertex2f(0.5,-0.5);
glEnd;

glfinish;
swapBuffers(DC);
endPaint(DC,ps);
end;

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

end.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 16.10.2011 в 09:33.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 16.10.2011, 09:41   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

...хорошо бы добавить буферизацию через glCallList().
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.10.2011, 13:49   #4
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
...хорошо бы добавить буферизацию через glCallList().
Вот не надо этого, вот не надо!
У автора темы сейчас совершенно другие проблемы

_PROGRAMM_, По поводу кода...

1. PFD_DOUBLEBUFFER + PFD_DRAW_TO_WINDOW + PFD_SUPPORT_OPENGL
Ну кто так делает?! Флаги объединяются OR-ом, а не плюсом! И это не просто хороший стиль, а другой результат в случае, если какие-то биты равны

2. У pfd не устанавливаешь cColorBits и cDepthBits. Занеси туда, например, 32 и 16 соответственно

3. BeginPaint, EndPaint и glFinish убери, они не нужны. Хуже не будет точно.

4. У меня была та же ерунда. Ничего не придумал, и положил в папку с exe'шником игры свои opengl32.dll и glu32.dll из C:\WINDOWS\system32. У всех всё нормально стало отображаться. Хотя выход это, конечно, временный...

А вообще, незачем самостоятельно инициализировать графику. Посмотри библиотеку GLFW (http://glfw.org/), она создаёт окно и контекст OpenGL. Есть заголовочный файл для Delphi.

Просто ты не можешь учесть особенности всех ОС и всех версий OpenGL, а там это учтено. И она кроссплатформенная)))

Последний раз редактировалось anyx; 16.10.2011 в 13:52.
anyx вне форума Ответить с цитированием
Старый 17.10.2011, 14:37   #5
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

raxp, спасибо но мне нужно отработать возникшую проблему.
аnyx теперь я обращаюсь к Вам. Я сразу не отвечал, потому что решил сначала все опробовать. Сразу скажу, что совет
Цитата:
Ничего не придумал, и положил в папку с exe'шником игры свои opengl32.dll и glu32.dll из C:\WINDOWS\system32.
к сожалению, не помог, но спасибо. Решил узнать о cColorBits и cDepthBits. Где-то мной было прочитано, что если не выставлять эти значения, то OpenGL автоматически подстроится под машину, хотя есть некие сомнения.
Теперь самое главное. То, что меня заинтересовало - GLFW . К сожалению я не очень хорошо знаю английский, поэтому документацию я пока не читал. Меня обрадовало слово
Цитата:
кроссплатформенная
даже улыбка на лице появилась. Хотелось бы узнать некоторые сведения. Я поищу, почитаю информацию, но пока хочу узнать. Решится ли моя проблема при добавлении этой библиотеки? Еще я хотел задать вопрос о том как с ней работать, но передумал, ибо хочется самому разобраться.
Спасибо вам.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 17.10.2011, 15:11   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

Цитата:
raxp, спасибо но мне нужно отработать возникшую проблему.
я не с потолка вам ответил, а поскольку была аналогичная проблема. И, кстати, не у вас первого такая проблема, поищите на форуме, ответ всегда давал практически такой-же.

Цитата:
У автора темы сейчас совершенно другие проблемы
не надо ля-ля.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 17.10.2011, 19:06   #7
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Цитата:
поищите на форуме, ответ всегда давал практически такой-же.
К сожалению, как я не старался и на форуме и в гугле, не нашел. Порыскав функцию glCallList() что-то нашел, но без комментариев. Смысл функции тоже не понятен. Можно попросить вас дать более подробный ответ? Спасибо

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 19.10.2011, 13:54   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

списки в OpenGL, это сохраненные(скомпилированные) команды, которые затем можно очень просто вызвать, выполняются они быстрее чем сами команды.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.10.2011, 15:31   #9
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Цитата:
списки в OpenGL, это сохраненные(скомпилированные) команды, которые затем можно очень просто вызвать, выполняются они быстрее чем сами команды.
Можете привести рабочий код(со сохраненным списком), или ткнуть меня носом. В просторах интернета я попадаю на куски рабочих проектов, где мало что понятно(в плане использования этой функции)
Буду благодарен.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 19.10.2011 в 15:35.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 19.10.2011, 15:57   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

http://programmersforum.ru/showthrea...List%28&page=2
http://programmersforum.ru/showthread.php?t=69832
http://programmersforum.ru/showpost....85&postcount=3
http://programmersforum.ru/showpost....58&postcount=7

p.s.: и еще, для своего приложения ведь doublebuffered имеется в true ? Кстати, и выводите свою прорисовку не на форму, а на TPanel.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
снова об виртуальных машинах. Пепел Феникса Общие вопросы по программированию, компьютерный форум 12 25.08.2011 23:35
данные о машинах не прошедших техосмотр Анастасья Помощь студентам 4 27.05.2011 14:29
Для созданного текста определить длину содержащейся в нем максимальной серии символов, отличных от букв. rusfin01 Помощь студентам 1 28.02.2011 10:25
Загрузка форматов, отличных от bmp в HBitMap. Alex Cones Общие вопросы Delphi 8 29.01.2011 14:35
макрос на разных машинах gsg Microsoft Office Excel 12 03.08.2010 13:18