Войти
ПрограммированиеФорумОбщее

Есть ли какая-нибудь header-only обертка для libpng?

#0
20:59, 11 ноя. 2016

Привет всем. Я вообщем не хочу лишнего мусора в коде. Вопрос короткий: где найти заголовочный враппер для libpng?
Да, libpng настоящий, C-шный, в виде DLL. Поэтому желательно только обертку. Не более.


#1
23:44, 11 ноя. 2016

viennahd
враппер есть, но тебе не понравиться... называется png++
поскольку ты говорил о лишнем мусоре в коде, прикручивать такую либу, ну как бы.....
по мне так лучше две функции написать loadPng, writePng

#2
0:01, 12 ноя. 2016

viennahd
вот! только что написал... как ты хотел, header-only:

+ Показать
#3
9:48, 12 ноя. 2016

Не совсем то, что хотел топикстартер, но посмотреть стоит.

http://lodev.org/lodepng/

LodePNG is a PNG image decoder and encoder, all in one, no dependency or linkage to zlib or libpng required.
It's made for C (ISO C90), and has a C++ wrapper with a more convenient interface on top.

#4
12:51, 12 ноя. 2016

Автор топика не осилил статическую линковку?
Или давайте тащить всякий левый код и переписывать только потому, что у него навязчивое желание не подключать лишний С файл? )

#5
19:01, 12 ноя. 2016

Дело не в этом. Я готов подключить C файлы, lib и dll. Это libpng и zlib.
Более того я их когда-то собрал.

#6
19:48, 12 ноя. 2016

viennahd
> Более того я их когда-то собрал.
Там достаточно просто бросить сишники в проект, чтоб собралось.

#7
21:54, 12 ноя. 2016

viennahd
> Мне нужно функция типа load_png(filename) и все.
> И чтобы желательно RGBA, или хотя бы известный формат. Что сложного?
> Все - опять трассировка откладывается на завтра. Устал уже.
> PNG - Pоходу Nеюзабельная Gрафика.
Почему именно libpng?

Пробовал stb_image и stb_image_write?
https://github.com/nothings/stb

#8
22:27, 12 ноя. 2016

Funtik
> вот! только что написал... как ты хотел, header-only
пробовал, не сработало

#9
22:54, 12 ноя. 2016

viennahd
что не сработало? код очень простой.... самый минимум... как ты делал? у меня так, подгружаю heder, создаю функцию:

GLuint LoadTexture(const char* filename, GLint minFilter, GLint magFilter, GLint wrapMode)
{
  PngLoader image;
  if (!image.load(filename))
  {
    std::cerr << "Could not open file: " << filename << std::endl;
    return 0;
  }

  GLuint textureID;
  glGenTextures(1, &textureID);
  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, textureID);
  glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGB8, image.getWidth(), image.getHeight());
  glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, image.getWidth(), image.getHeight(), GL_RGB, GL_UNSIGNED_BYTE, image.getData());

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode);
  glGenerateMipmap(GL_TEXTURE_2D);

  return textureID;
}
Инициализация:
g_texture0 = LoadTexture("test.png", GL_LINEAR, GL_LINEAR, GL_REPEAT);
g_texture0_loc = glGetUniformLocation(program, "texture0");

в рендере:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, g_texture0);
glUniform1i(g_texture0_loc, 0);

#10
23:16, 12 ноя. 2016

viennahd
или ты собрать либу не можешь?  скачиваешь последнюю версию отсюда: https://sourceforge.net/projects/libpng/files/
1) libpng16 => 1.6.26 (последняя версия)
2) zlib => 1.2.8
для построения кладёшь в какую нибудь директорию распакованные архивы:
lpng1626
zlib-1.2.8
заходишь в директорию с проектом и собираешь (lpng1626/projects/vstudio)
лично я переделываю под x64, т.к. считаю, что x86 уже умер.

#11
0:07, 13 ноя. 2016

Ай ладно...
Я кое как загрузил lodepng.

ПрограммированиеФорумОбщее

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