Войти
GLEngine2DФорум

GLEngine2D - простой движок на OpenGL (комментарии)

#0
15:37, 14 июля 2011

GLEngine2D - простой движок на OpenGL (комментарии)

Это сообщение сгенерировано автоматически.


#1
15:41, 14 июля 2011

Все демки с исходниками доступны по ссылке указанной в конце статьи

#2
20:00, 16 июля 2011

Привет. Скачал твой движок.
Нравится что прост в использовании, довольно шустр и имеет весь необходимый для создания 2д игр функционал. Решил использовать его в новом проекте и возможно перевести на него один из текущих.

Но столкнулся с такой проблемой. При загрузке 2го изображения png программа вылетает с ошибкой:
Изображение

Код такой:
GLE.LoadImage(ExtractFilePath(Application.ExeName)+'res\spla1.png',spla[1],false);
GLE.LoadImage(ExtractFilePath(Application.ExeName)+'res\spla2.png',spla[2],false);

Что делать?

#3
8:02, 18 июля 2011

Можно посмотреть на код инициализации и на пример загружаемой картинки.

#4
20:13, 19 июля 2011

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, GLEngine, ExtCtrls;
...
GLE:=TGLEngine.Create;
GLE.VisualInit(GetDC(Panel1.Handle),Panel1.ClientWidth,Panel1.ClientHeight,0);

Вроде все почти как в примере.

Картинки:
http://i26.fastpic.ru/big/2011/0719/d8/167a8ac755295d7d0ff49aab228f87d8.png
http://i26.fastpic.ru/big/2011/0719/3b/7779c07ded1775a64c202ac35c38943b.png

#5
23:32, 19 июля 2011

Демка "[GLEngine]FileView" кстати тоже не работает (даже готовый *.ехе из архива без перекомпиляции).
Ошибка та же.

#6
8:07, 20 июля 2011

Вторая картинка имеет глубину цвета 8 бит, это не поддерживается движком.
Пересохраните картинку с глубиной 32 бита и всё заработает.

#7
10:58, 20 июля 2011

Demi-86
> Вторая картинка имеет глубину цвета 8 бит, это не поддерживается движком.
А слабо в коде загрузки png сказать:

   if (color_type == PNG_COLOR_TYPE_PALETTE)
      png_set_palette_to_rgb(png_ptr);
#8
11:00, 20 июля 2011

А слабо сначала скачать, посмотреть, а потом комментировать?

#9
11:03, 20 июля 2011

А, понятно. Дельфины и лисапеты, даже на загрузке png.

#10
11:05, 20 июля 2011

Холивар начинать не будем. Не нравится - не пользуемся.

p.s. Для меня не критично использование только 24 или 32 битных PNG, кому надо другое, движёк в исходниках - поправят, или напишут мне, поправлю я.

#11
11:16, 20 июля 2011

Дело не в холиваре.
Референсная libpng содержит код, позволяющий одним вызовом декодировать палитровую картинку в rgba. Всего одна проверка и один вызов - и все довольны.

> кому надо другое, движёк в исходниках - поправят, или напишут мне, поправлю я.
С таким подходом далеко не уедешь. "Кому надо другое" пойдут искать другое, а не допиливать чьё-то.

#12
11:42, 20 июля 2011

Поправил, в след. версии будет

Кому интересно:

procedure png8to24(png: TPNGObject);
var
 tmp: TPNGObject;
 tRNS: TChunktRNS;
 PLTE: TChunkPLTE;
 src, alpha: pByteArray;
 dst: pRGBLine;
 x,y: integer;
begin
 tRNS:=png.Chunks.ItemFromClass(TChunktRNS) as TChunktRNS;
 PLTE:=png.Chunks.ItemFromClass(TChunkPLTE) as TChunkPLTE;
 if (tRNS=nil) or (PLTE=nil)
  then exit;
 tmp:=TPNGObject.CreateBlank(COLOR_RGBALPHA, 8, png.Width, png.Height);
 for y:=0 to png.Height-1 do
 begin
  src:=png.Scanline[y];
  dst:=tmp.Scanline[y];
  alpha:=tmp.AlphaScanline[y];
 for x:=0 to png.Width-1 do
 begin
  dst[x].rgbtBlue:=PLTE.Item[src[x]].rgbBlue;
  dst[x].rgbtGreen:=PLTE.Item[src[x]].rgbGreen;
  dst[x].rgbtRed:=PLTE.Item[src[x]].rgbRed;
  alpha[x]:=tRNS.PaletteValues[src[x]];
 end;
end;
png.Assign(tmp);
tmp.Destroy;
end;

#13
22:32, 9 авг. 2011

Новый вопрос: как заставить работать под lazarus (там не хватает модуля Graphics)?
И если заставить, то будет ли дружба с линём (нужна) и маком (в принципе пофиг, но если будет - хорошо)?

#14
14:28, 22 авг. 2011

Под lazarus работать заставлял, даже пытался перевести проект полностью на фрипаскаль.
Пришлось подключать библиотеку Vampire для работы с графическими файлами, но никто не откликнулся на инициативу, благополучно забросил, пишу на делфях

GLEngine2DФорум

Тема в архиве.