The pixel format of the created texture may be different from the pixel format of the surface. The game loop was based on dewitters article, and the state machine was based off of an answer by indi on my first game. Today software rendering has mostly been replaced by gpus but there are still places where it can be useful. I am going to assume that you already have sdl2 set up. Developing a software renderer part 1 trenkis dev blog. It is just a hobby project for my own entertainment, but you can use it as you want and contribute to it freely. A render driver is a set of code that handles rendering and texture management on a particular display.
It is possible to render hardware images but its a bit more difficult. Note that if you get a software display surface from sdl, you should not set up a shadow surface of your own. Swap textures to have texture before texturenative in the list. Does it make sense to render to only part of a window. The code was condensed and rearranged in order to just have a minimum viable project to show the basic idea. The pixel value of 0 is the colorkey, giving a transparent background when blitted. Even if you plan to software render your game to a buffer of pixels, you shouldnt force the software renderer. That way, you get fast software rendering with alphablending and other stuff, but you still perform only writes to vram. There is no requirement for this surface to be window surface, you can draw to backbuffer, convert it to texture and feed the result to d3d or opengl renderer. Software rendering is incredibly slow, except for very specific uses and circumstances. The difference is, your cpu software renderer can simulate the actions of a few shading units probably on the order of 1 per execution thread, so on an average consumer multicore cpu, maybe 4. As such, you compose your entire scene and present the composed backbuffer to the screen as a complete picture. Lazy foo productions getting an image on the screen. Information on the capabilities of a render driver or context.
As you seem to have learned the hard way, sdl2 doesnt really support rendering surfaces directly anymore. In that case i really only wanted to focus on the animation itself, plus im using fixed timesteps in my other projects or ticks, hence the lack of timebased values in my animation code, but in the end it doesnt make much of a difference. Sdl2 uses rendering and textures to utilize hardware acceleration, but is also allows software rendering. You may not combine this with 3d or the rendering api on this window. Graphical renderer is used to show output on the display. Drawing to a screen using sdl2 learn programming 1. I just finished making a flappy bird type game and would like some feedback on my game loop and state machine. This is for software renderingin the future, well get into gpu. Sdl view topic no hardware accelation in macbook pro. You can get the renderer from the window, but it doesnt seem like you can go the other way around. Also, you seem to clear the renderer without rerendering the texture. Basic software renderer written in sdl, compatible with sdl1. Intro to software rendering with sdl2 benedict henshaw.
Sdl surfaces use software rendering which means it uses the cpu to render. Where you want to render the texture in the window. Do you want to know a way to get your sdl2 applications running faster. Solid quick and dirty create an 8bit palettized surface and render the given text at fast quality with the given font and color. Pysdl2 is a rather thin wrapper around sdl s c api.
The surface is not modified or freed by this function. A general question about a window with an extensive menu that is updated often, but only around 10% of the actual screen is updated. Why doesnt sdl2 recognize a game controller button press. Permission is granted to anyone to use this software for any purpose. Unfortunaly i need to do a lot of alpha blending and software rendering. It is possible to render hardware images but its a bit more difficult so were going to learn it the easy way first. Im relatively new to game development compared to the pioneers. This is purely a hobby project, i started it to learn and experience 3d programming closely.
An sdl surface is just an image data type that contains the pixels of an image along with all data needed to render it. Use this function to create a 2d software rendering context for a surface. If the window was created successfully, we want to get the windows surface so we can draw to it. All this time, weve been doing software rendering which is where the. Please include your contact information if youd like to receive a reply. This means rendering will be executed on the gpu, where it belongs. This surface will be freed when the window is destroyed. Getting an image on the screen lazy foo productions. In sdl2, what is the difference between a texture and a. Lazy foo productions texture loading and rendering. You can get the width value from the surface itself if needed.