|
90 / 16 / 1
Регистрация: 08.11.2011
Сообщений: 96
|
|
OpenGL и невидимый Bitmap: не всякая поверхность строится под Delphi XE2 64bit26.11.2011, 15:58. Показов 3233. Ответов 11
Метки нет (Все метки)
В соседних ветках описывал свои мучения с выводом графики OpenGL на невидимый Битмап. Проблемы возникают только под Delphi XE2 под 64бит (под 32бит всё ОК - даже на невидимый Битмап) и только для невидимого Битмапа (или DIB - без разницы). Вот теперь к своему изумлению выяснил следующее. Не всякая поверхность строится нормально - некоторые сразу дают ошибку External Exception 8000003.
Итак, тестовая поверхность, заданная просто на сетке. Индекс i = 0.....1000 Индекс j = 0.....1200 Координата X = i*0.02 Координата Y = j*0.02 Т.е, просто декартова сетка (ради теста). Сама поверхность: Z = 0.2 + 0.2*sin((i+j) / 30) - слабо волнистая - строится нормально Z = 0.2 + 0.2*sin((i+j) / 5) - сильно волнистая - не строится вообще Нормали к поверхности задавать или нет - без разницы. Пробовал в каждой ячейке сетки строить пару треугольников (понятно как) - режим gl_Triangles Пробовал так же полосами - режим gl_Quad_strip. Тоже без разницы. Что это за бред такой? Не хватает какого-то буфера глубины? Или это глюк нового компилятора??
0
|
|
| 26.11.2011, 15:58 | |
|
Ответы с готовыми решениями:
11
Delphi XE2: ошибки при многократном рендеринге в Bitmap Проект на Delphi XE2 под Windows XP OpenCL в Delphi XE2 под Win64bit: можете протестировать на своей видеокарте? |
|
90 / 16 / 1
Регистрация: 08.11.2011
Сообщений: 96
|
||||||||||||||||||||||
| 27.11.2011, 17:33 [ТС] | ||||||||||||||||||||||
Буфер глубины я вроде бы всегда чищу:
Пытался биться с Frame Buffer Object - описывал в соседней ветке, так там свои "болячки": далеко не на каждом компе идёт. Либо вообще не находит функций-расширений OpenGL, либо не проходят даже первые процедуры инициализации FBO:
0
|
||||||||||||||||||||||
|
|
|||
| 27.11.2011, 18:06 | |||
0
|
|||
|
90 / 16 / 1
Регистрация: 08.11.2011
Сообщений: 96
|
|
| 27.11.2011, 19:21 [ТС] | |
|
С этим ясно... Хотя при работе с текстурой и FBO мне перед инициализацией FBO приходилось задавать экранный контекст - как обычно для OpenGL. Потом уже вызывать функции работы с FBO. И в рамках размера экранного контекста она и рисовала. Возможно, я вообще неправильно инициализирую FBO? Примеров работы на Delphi с FBO не так много. Может у Вас есть понятные ссылки?
0
|
|
|
90 / 16 / 1
Регистрация: 08.11.2011
Сообщений: 96
|
||
| 28.11.2011, 13:26 [ТС] | ||
|
1) http://exfile.ru/232178 - полная версия, где для картинки с синусами есть нормали, блеск, можно повращать и помасштабировать её обычными средствами (Ctrl-Shifr-Alt-mouse). Там в основной форме 2 кнопки. Первая просто рисует графику OpenGL на ещё одну форму. Вторая (справа) рисует, а потом рендерит в битмап (DIB) и сохраняет в файл. Успех работы второй зависит от значения DENOMINATOR, выбираемого на форме - это знаменатель в формуле с синусом, определяющей поверхность. Под 32бит идёт всё. Под 64бит идёт только при Denominator >100 2) http://exfile.ru/232180 - усечённая версия: с ней проще работать, анализировать - картинки не столь красивы, неподвижны, но баги те же (на любом компе). Привожу там полные тексты и все EXE. Всё делалось под Delphi XE2 Update2 (сборка 4316). Похоже, у Embarcadero возникла проблема с буфером глубины именно для DIB или Bitmap под 64бит.
0
|
||
|
90 / 16 / 1
Регистрация: 08.11.2011
Сообщений: 96
|
||
| 28.11.2011, 14:28 [ТС] | ||
|
Проверьте, если не трудно и полную версию... Именно на предмет нормального сохранения в DIB и затем в файл. Может, у нас на работе Win7 64бит неправильная?
0
|
||
|
|
||
| 29.11.2011, 01:48 | ||
|
Кстати, если уменьшить сетку в 10 раз, то есть 120 на 100 то у меня ошибки нет при DENOMINATOR = 50. Удивила матрица проекций. По какому принципу вы её формируете я так и не догнал. Какую цель приследовали тоже не понял: синусоида всё равно вылазит за пределы. Будет время поковыряюсь ещё.
0
|
||
|
90 / 16 / 1
Регистрация: 08.11.2011
Сообщений: 96
|
|||||||
| 29.11.2011, 12:39 [ТС] | |||||||
|
Там ВООБЩЕ нет никакой арифметики кроме:
Причём PImax, PJmax (размеры сетки) параметр Denominator пользователь задаёт сам в основной форме (это явно не нули и не бесконечности). При Denominator=100 всё проходит, а при Denominator=20 - крах. Код будет всегда работать только если сделать glDisable(gl_Depth_Test); Заметьте: ошибка происходит в защищённой области памяти (после первого сообщения об ошибке выскакивает второе - об ошибке в Kernel.dll и External Exception 8000003). Опять же - ошибки только при компиляции под 64бит, а под 32бит - всегда ОК. Что совсем не понятно.
0
|
|||||||
|
|
|
| 03.12.2011, 19:43 | |
|
Пол вечера вычислял ошибку. Даже написал свой код для рисования. Вот что накопал:
При создании контекста wglCreateContext сбрасывается флаг состояния сопроцессора. Причём сбрасывается он только если целевая платформа x64 и формат пикселя содержит флаг PFD_DRAW_TO_BITMAP. Возможно есть ещё какие-то условия. Всё не проверишь. Но проблема в том что даже если явно после создания контекста восстанавливать флаги. Ошибка всё равно возникает! Поиски продолжаются...
1
|
|
|
90 / 16 / 1
Регистрация: 08.11.2011
Сообщений: 96
|
||
| 03.12.2011, 21:44 [ТС] | ||
|
0
|
||
| 03.12.2011, 21:44 | |
|
Помогаю со студенческими работами здесь
12
Почему поверхность в Excel строится по двум таблицам? Пара игр с исходниками на Delphi 7 под OpenGL Что лучше брать Delphi XE2, Delphi XE, Delphi 7? RAD Studio XE2 и OpenGL Delphi 2010 feat. Delphi XE2 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|