Thread overview | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
September 19, 2019 Indexed graphics for retro engine? | ||||
---|---|---|---|---|
| ||||
Is there a way to make a indexed graphics library that can handle importing and exporting true color images? I would guess something like this could be simulated with pointers and references right? |
September 19, 2019 Re: Indexed graphics for retro engine? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Shadowblitz16 | oh I would also like to be able to draw indexed images shapes as well. |
September 19, 2019 Re: Indexed graphics for retro engine? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Shadowblitz16 | *indexed color images and shapes |
September 19, 2019 Re: Indexed graphics for retro engine? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Shadowblitz16 | On Thursday, 19 September 2019 at 03:47:05 UTC, Shadowblitz16 wrote: > Is there a way to make a indexed graphics library that can handle importing and exporting true color images? I don't see why not. > > I would guess something like this could be simulated with pointers and references right? If you want to, say, take a 24-bit or 32-bit and treat it as an 8-bit image, you'll probably want to actually do a conversion rather than a simulation. In which case you'd probably be better off just using an existing C library like FreeImage. You can find a binding here: https://github.com/BindBC/bindbc-freeimage Otherwise, you'll want to hit up a graphics programming forum for resources on image conversion. Two possibilities: https://www.reddit.com/r/GraphicsProgramming/ https://www.gamedev.net/forums/forum/5-graphics-and-gpu-programming/ |
September 19, 2019 Re: Indexed graphics for retro engine? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Parker | On Thursday, 19 September 2019 at 05:22:37 UTC, Mike Parker wrote:
> On Thursday, 19 September 2019 at 03:47:05 UTC, Shadowblitz16 wrote:
>> Is there a way to make a indexed graphics library that can handle importing and exporting true color images?
>
> I don't see why not.
>
>>
>> I would guess something like this could be simulated with pointers and references right?
>
> If you want to, say, take a 24-bit or 32-bit and treat it as an 8-bit image, you'll probably want to actually do a conversion rather than a simulation. In which case you'd probably be better off just using an existing C library like FreeImage. You can find a binding here:
>
> https://github.com/BindBC/bindbc-freeimage
>
> Otherwise, you'll want to hit up a graphics programming forum for resources on image conversion. Two possibilities:
>
> https://www.reddit.com/r/GraphicsProgramming/
>
> https://www.gamedev.net/forums/forum/5-graphics-and-gpu-programming/
I wanted to do 4bpp 16 color graphics.
and I didn't want to load anything unnecessary in the image like the palette but instead supply it myself as a Color[16];
|
September 19, 2019 Re: Indexed graphics for retro engine? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Shadowblitz16 | On Thursday, 19 September 2019 at 18:25:05 UTC, Shadowblitz16 wrote:
> I wanted to do 4bpp 16 color graphics.
> and I didn't want to load anything unnecessary in the image like the palette but instead supply it myself as a Color[16];
I see. In that case, I suggest you find some tutorials on software rendering in C or C++ and adapt them to D. Most of the modern stuff out there is going to be targeting 24-bit or 32-bit graphics. You might find some older tutorials on indexed 8-bit rendering that you can adapt to 4-bit. Nothing to it but storing the palette indices in a byte array.
|
September 19, 2019 Re: Indexed graphics for retro engine? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Parker | On Thursday, 19 September 2019 at 19:16:03 UTC, Mike Parker wrote:
> On Thursday, 19 September 2019 at 18:25:05 UTC, Shadowblitz16 wrote:
>
>> I wanted to do 4bpp 16 color graphics.
>> and I didn't want to load anything unnecessary in the image like the palette but instead supply it myself as a Color[16];
>
> I see. In that case, I suggest you find some tutorials on software rendering in C or C++ and adapt them to D. Most of the modern stuff out there is going to be targeting 24-bit or 32-bit graphics. You might find some older tutorials on indexed 8-bit rendering that you can adapt to 4-bit. Nothing to it but storing the palette indices in a byte array.
can I do this in D and draw them to a 32bpp bitmap pixel by pixel?
I would prefer do do this on the gpu but I don't know how.
|
September 20, 2019 Re: Indexed graphics for retro engine? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Shadowblitz16 | On 20/09/2019 8:47 AM, Shadowblitz16 wrote: > On Thursday, 19 September 2019 at 19:16:03 UTC, Mike Parker wrote: >> On Thursday, 19 September 2019 at 18:25:05 UTC, Shadowblitz16 wrote: >> >>> I wanted to do 4bpp 16 color graphics. >>> and I didn't want to load anything unnecessary in the image like the palette but instead supply it myself as a Color[16]; >> >> I see. In that case, I suggest you find some tutorials on software rendering in C or C++ and adapt them to D. Most of the modern stuff out there is going to be targeting 24-bit or 32-bit graphics. You might find some older tutorials on indexed 8-bit rendering that you can adapt to 4-bit. Nothing to it but storing the palette indices in a byte array. > > can I do this in D and draw them to a 32bpp bitmap pixel by pixel? > I would prefer do do this on the gpu but I don't know how. I've done a quick lookup in my red book (seventh edition so 3.1). For OpenGL the choice between RGBA mode vs indexed happens by the system windowing library (context creation) not OpenGL itself. This means without writing a windowing library yourself, you won't get indexed mode and even then you would be stuck with it for whatever window you draw to. Also for x86 cpu's anything less than 32bpp is going to be inefficient. You may as well map your indexed image straight into RGBA8 on load. As for book recommendations here is one for DOS: https://www.amazon.com/Black-Art-Game-Programming-High-Speed/dp/1571690042 You will only want the first five chapters or so, but it should cover the material you need and have some more for when you are interested in 3d. |
September 19, 2019 Re: Indexed graphics for retro engine? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Shadowblitz16 | On Thursday, 19 September 2019 at 20:47:45 UTC, Shadowblitz16 wrote:
> On Thursday, 19 September 2019 at 19:16:03 UTC, Mike Parker wrote:
>> On Thursday, 19 September 2019 at 18:25:05 UTC, Shadowblitz16 wrote:
>>
>>> I wanted to do 4bpp 16 color graphics.
>>> and I didn't want to load anything unnecessary in the image like the palette but instead supply it myself as a Color[16];
>>
>> I see. In that case, I suggest you find some tutorials on software rendering in C or C++ and adapt them to D. Most of the modern stuff out there is going to be targeting 24-bit or 32-bit graphics. You might find some older tutorials on indexed 8-bit rendering that you can adapt to 4-bit. Nothing to it but storing the palette indices in a byte array.
>
> can I do this in D and draw them to a 32bpp bitmap pixel by pixel?
> I would prefer do do this on the gpu but I don't know how.
I'd create a fragment shader to convert each pixel to 8 bit. There are many examples on the web about creating fragment shaders and 2d opengl scenes, i.e. a 2d scene where OpenGL coordinates are integer pixel coordinates. Once you get that you then just implement the conversion routine.
Using the shader you can render the image as a textured quad and send the colour look up table down as an additional 1d texture. This way you can have several D arrays for each colour table and simply swap the texture buffer pointer to instantly switch colours.
You can also get cool effects this way when you move to 3d using 8 bit colour tables.
|
September 20, 2019 Re: Indexed graphics for retro engine? | ||||
---|---|---|---|---|
| ||||
Posted in reply to norm | On Thursday, 19 September 2019 at 23:32:13 UTC, norm wrote:
> On Thursday, 19 September 2019 at 20:47:45 UTC, Shadowblitz16 wrote:
>> [...]
>
> I'd create a fragment shader to convert each pixel to 8 bit. There are many examples on the web about creating fragment shaders and 2d opengl scenes, i.e. a 2d scene where OpenGL coordinates are integer pixel coordinates. Once you get that you then just implement the conversion routine.
>
> Using the shader you can render the image as a textured quad and send the colour look up table down as an additional 1d texture. This way you can have several D arrays for each colour table and simply swap the texture buffer pointer to instantly switch colours.
>
> You can also get cool effects this way when you move to 3d using 8 bit colour tables.
the issue with using openGL is its complex and hard to get working with a widget library
|
Copyright © 1999-2021 by the D Language Foundation