You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
1.3 KiB

  1. #include "util.h"
  2. static RenderableBuffer* sRenderableBuffer = nullptr;
  3. void InitRenderableBuffer(HDC dc, int width, int height)
  4. {
  5. sRenderableBuffer = new RenderableBuffer();
  6. sRenderableBuffer->mDC = CreateCompatibleDC(dc);
  7. BITMAPINFO bitmapinfo = {};
  8. bitmapinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
  9. bitmapinfo.bmiHeader.biPlanes = 1;
  10. bitmapinfo.bmiHeader.biBitCount = 32;
  11. bitmapinfo.bmiHeader.biCompression = BI_RGB;
  12. bitmapinfo.bmiHeader.biWidth = width;
  13. bitmapinfo.bmiHeader.biHeight = height;
  14. sRenderableBuffer->mBitmap = CreateDIBSection(sRenderableBuffer->mDC, &bitmapinfo, DIB_RGB_COLORS, (void**)&sRenderableBuffer->mColorBuffer, 0, 0);
  15. SelectObject(sRenderableBuffer->mDC, sRenderableBuffer->mBitmap);
  16. sRenderableBuffer->mHeight = height;
  17. sRenderableBuffer->mWidth = width;
  18. sRenderableBuffer->mPixelCount = height * width;
  19. }
  20. void SetColor(int x, int y, AByte r, AByte g, AByte b, AByte a)
  21. {
  22. AUint color = (a << 24) + (r << 16) + (g << 8) + b;
  23. int pixel_index = y * sRenderableBuffer->mWidth + x;
  24. if (pixel_index < sRenderableBuffer->mPixelCount) {
  25. sRenderableBuffer->mColorBuffer[pixel_index] = color;
  26. }
  27. }
  28. void ASwapBuffers(HDC dc)
  29. {
  30. BitBlt(dc, 0, 0, sRenderableBuffer->mWidth, sRenderableBuffer->mHeight, sRenderableBuffer->mDC, 0,0, SRCCOPY);
  31. }