private void Initialize() { if (SDL.Init((uint)InitFlags.SDL_INIT_VIDEO) != 0) { throw new InvalidOperationException("Failed to init SDL"); } // TODO: enable mouse input _window = SDLVideo.CreateWindow("Hello World!", 30, 30, ScreenWidth, ScreenHeight, (uint)(WindowFlags.WINDOW_SHOWN | WindowFlags.WINDOW_RESIZABLE)); if (_window == null) { SDL.Quit(); throw new InvalidOperationException("Failed to create window"); } _renderer = SDLRender.CreateRenderer(_window, -1, (uint)(RendererFlags.RENDERER_ACCELERATED)); if (_renderer == null) { SDL.Quit(); throw new InvalidOperationException("Failed to create renderer"); } this.OnInitialize(); }
protected void Draw(int x, int y, Vector4?color = null) { if (x >= 0 && x < this.ScreenWidth && y >= 0 && y < this.ScreenHeight) { SetColor(color ?? Vector4.One); SDLRender.RenderDrawPoint(_renderer, x, y); } }
private void ReleaseUnmanagedResources() { SDLRender.DestroyRenderer(_renderer); SDLVideo.DestroyWindow(_window); SDL.Quit(); }
protected void ClearScreen(Vector4?color = null) { SetColor(color ?? GetColor(Color.Cyan)); SDLRender.RenderClear(_renderer); }
protected void DrawLine(int x1, int y1, int x2, int y2, Vector4?col = null) { SetColor(col ?? Vector4.One); SDLRender.RenderDrawLine(_renderer, x1, y1, x2, y2); //var dx = x2 - x1; //var dy = y2 - y1; //var dx1 = Math.Abs(dx); //var dy1 = Math.Abs(dy); //var px = 2 * dy1 - dx1; //var py = 2 * dx1 - dy1; //int x; //int xe; //int y; //int ye; //if (dy1 <= dx1) //{ // if (dx >= 0) // { // x = x1; // y = y1; // xe = x2; // } // else // { // x = x2; // y = y2; // xe = x1; // } // Draw(x, y, col); // while (x < xe) // { // x++; // if (px < 0) // { // px += 2 * dy1; // } // else // { // if (dx < 0 && dy < 0 || dx > 0 && dy > 0) // { // y += 1; // } // else // { // y -= 1; // } // px += 2 * (dy1 - dx1); // } // Draw(x, y, col); // } //} //else //{ // if (dy >= 0) // { // x = x1; // y = y1; // ye = y2; // } // else // { // x = x2; // y = y2; // ye = y1; // } // Draw(x, y, col); // while (y < ye) // { // y += 1; // if (py <= 0) // { // py += 2 * dx1; // } // else // { // if (dx < 0 && dy < 0 || dx > 0 && dy > 0) // { // x += 1; // } // else // { // x -= 1; // } // py += 2 * (dx1 - dy1); // } // Draw(x, y, col); // } //} }
private void SetColor(Vector4 color) { SDLRender.SetRenderDrawColor(_renderer, (byte)(color.X * 255), (byte)(color.Y * 255), (byte)(color.Z * 255), (byte)(color.W * 255)); }
protected void PresentFrame() { SDLRender.RenderPresent(_renderer); }