opengl z winapi-ładowanie tekstury

0

Mam funkcję ładującą teksturę i zwracającą ją w formacie gluint. niestety na linijce:

 png_get_IHDR(png_ptr, info_ptr, twidth, theight, bit_depth, color_type,NULL, NULL, NULL);

wywala mi błąd: L:\C++\brak nazwy\definitions.hpp|326|error: invalid conversion from 'png_uint_32' to 'png_uint_32*'|

 jak to naprawić? prosze o szybką odpowiedź
0

invalid conversion from 'png_uint_32' to 'png_uint_32*'

png_get_IHDR(png_ptr, info_ptr, &width, &height,
       &bit_depth, &color_type, &interlace_type,
       &compression_type, &filter_method);

    width          - holds the width of the image
                     in pixels (up to 2^31).
    height         - holds the height of the image
                     in pixels (up to 2^31).
    bit_depth      - holds the bit depth of one of the
                     image channels.  (valid values are
                     1, 2, 4, 8, 16 and depend also on
                     the color_type.  See also
                     significant bits (sBIT) below).
    color_type     - describes which color/alpha channels
                         are present.
                     PNG_COLOR_TYPE_GRAY
                        (bit depths 1, 2, 4, 8, 16)
                     PNG_COLOR_TYPE_GRAY_ALPHA
                        (bit depths 8, 16)
                     PNG_COLOR_TYPE_PALETTE
                        (bit depths 1, 2, 4, 8)
                     PNG_COLOR_TYPE_RGB
                        (bit_depths 8, 16)
                     PNG_COLOR_TYPE_RGB_ALPHA
                        (bit_depths 8, 16)

                     PNG_COLOR_MASK_PALETTE
                     PNG_COLOR_MASK_COLOR
                     PNG_COLOR_MASK_ALPHA

    filter_method  - (must be PNG_FILTER_TYPE_BASE
                     for PNG 1.0, and can also be
                     PNG_INTRAPIXEL_DIFFERENCING if
                     the PNG datastream is embedded in
                     a MNG-1.0 datastream)
    compression_type - (must be PNG_COMPRESSION_TYPE_BASE
                     for PNG 1.0)
    interlace_type - (PNG_INTERLACE_NONE or
                     PNG_INTERLACE_ADAM7)
    Any or all of interlace_type, compression_type, of
    filter_method can be NULL if you are
    not interested in their values.

    channels = png_get_channels(png_ptr, info_ptr);
    channels       - number of channels of info for the
                     color type (valid values are 1 (GRAY,
                     PALETTE), 2 (GRAY_ALPHA), 3 (RGB),
                     4 (RGB_ALPHA or RGB + filler byte))
    rowbytes = png_get_rowbytes(png_ptr, info_ptr);
    rowbytes       - number of bytes needed to hold a row

    signature = png_get_signature(png_ptr, info_ptr);
    signature      - holds the signature read from the
                     file (if any).  The data is kept in
                     the same offset it would be if the
                     whole signature were read (i.e. if an
                     application had already read in 4
                     bytes of signature before starting
                     libpng, the remaining 4 bytes would
                     be in signature[4] through signature[7]
                     (see png_set_sig_bytes())).


    width            = png_get_image_width(png_ptr,
                         info_ptr);
    height           = png_get_image_height(png_ptr,
                         info_ptr);
    bit_depth        = png_get_bit_depth(png_ptr,
                         info_ptr);
    color_type       = png_get_color_type(png_ptr,
                         info_ptr);
    filter_method    = png_get_filter_type(png_ptr,
                         info_ptr);
    compression_type = png_get_compression_type(png_ptr,
                         info_ptr);
    interlace_type   = png_get_interlace_type(png_ptr,
                         info_ptr);

http://www.libpng.org/pub/png/libpng-1.2.5-manual.html

0

no z tego co widzę to chyba zapomniałem o znakach & wszędzie :) a jak to poprawiłem, to pisze, że nie widzi połowy poleceń, zupełnie jak przy winapi... nie pamiętam jak to się nazywało ale wiem, że to się dodaje do linkera i zaczyna się na - . wyskakuje taki błąd

L:\C++\brak nazwy\definitions.hpp|290|undefined reference to `png_sig_cmp'| 
0

Jakby Ci to dobrze powiedzieć...
Coś spiprzyłeś, ale dałeś za mało kodu, żeby wywnioskować konkretnie co.
Spiprzyłeś z przesyłem argumentów.

EDIT:
Albo nie dołączyłeś libów, albo nie dodałeś flagi linkera.

0

thx za odpowiedź, nie dołączyłem flagi linkera co nie zmienia faktu, że nie mogę znaleźć poprawnej flagi libpng bo wszystkie jakie znajduje nie działają
np -lpng -lz na nich wywala błąd, że ich nie ma

0

Użyj picopng, to nie będziesz musiał nic dodatkowo linkować - http://lodev.org/lodepng/picopng.cpp

0

libpng to niestety straszny syf. Trudno o bardziej zawiłe API.

Jak nie zależy ci na przenośności (tylko Windows) to Windows ma wbudowaną bibliotekę obsługującą jpeg, png i inne.

Sprawdzałem, działa z OpenGL.

0

No w sumie to dzięki tylko ja nie mam potrzebnych bibliotek do tego i nie mogę znaleźć ich w internecie(wszędzie jest kod źródłowy, którego nie mogę przekopiować w całości bo ctrl+c nie daje rady) czemu albo biblioteka nie działa, albo jej nie mogę znaleźć?

0

Ech. W przypadku każdej biblioteki masz pliki nagłówkowe (.h albo .hpp) i biblioteki binarne (.lib albo .a zależnie od kompilatora).
Czasami libki masz skompilowane już w pakiecie, czasami trzeba sobie je skompilować zgodnie z instrukcją dołączoną do biblioteki.

Żeby użyć biblioteki, trzeba: 1. dodać #include w kodzie programu, 2. powiedzieć linkerowi że ma użyć libki.

W przypadku kompilatora GCC podaje się to parametrem -lxxx, gdzie xxx to nazwa libki. I tak -lpng powoduje że linker szuka pliku o nazwie libpng.a

W przypadku Visual C++ podajemy po prostu pelną nazwę biblioteki, bez dodatkowych parametrów, np. png.lib - ale w praktyce to się robi we właściwościach projektu w IDE.

1 użytkowników online, w tym zalogowanych: 0, gości: 1