// sdltest1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <stdio.h> #include <SDL.h> #include <stdlib.h> #include <windows.h> void draw2(){ SDL_Window *window; SDL_Renderer *renderer =NULL; SDL_Init(SDL_INIT_VIDEO); //window = SDL_CreateWindowFrom((void *)(gwnd)); window = SDL_CreateWindow("窗口标题",300,300,300,300,SDL_WINDOW_SHOWN| SDL_WINDOW_RESIZABLE); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); if (window) { renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (!renderer) { renderer = SDL_CreateRenderer(window, -1, 0); } if (renderer) { } } SDL_Texture *texture = NULL; // 纹理 // 创建纹理(第二个参数是指明像素格式,可以是YUV或RGB,第3个参数是指明纹理类型,可以是stream(流)或target(一般类型)) texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 200, 150); if (!texture) { printf("纹理创建失败!\n"); return; } SDL_Rect rect; // 绘制的矩形 for (int i = 0; i < 10;i++) { // 随机设置矩形位置 rect.x = rand() % 600; rect.y = rand() % 440; // 对纹理进行渲染 SDL_SetRenderTarget(renderer, texture); // 改变渲染目标为纹理 SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); // 设置纹理颜色(颜色为RGBA) SDL_RenderClear(renderer); // 清空渲染器 // 绘制矩形并给矩形填充颜色 SDL_RenderDrawRect(renderer, &rect); // 绘制矩形 SDL_SetRenderDrawColor(renderer, rand() % 256, rand() % 256, rand() % 256, 255); // 给矩形设置随机色 SDL_RenderFillRect(renderer, &rect); // 填充 // 恢复成默认渲染目标 SDL_SetRenderTarget(renderer, NULL); // 将目标输出到显卡 SDL_RenderCopy(renderer, texture, NULL, NULL); SDL_RenderPresent(renderer); // 显卡计算完后进行显示 Sleep(300); } if (window) // 销毁window { SDL_DestroyWindow(window); } if (renderer) // 销毁渲染器 { SDL_DestroyRenderer(renderer); } if (texture) // 销毁纹理 { SDL_DestroyTexture(texture); } SDL_Quit(); } int _tmain(int argc, _TCHAR* argv[]) { draw2(); return -1; SDL_Window *window; SDL_Renderer *renderer; SDL_Init(SDL_INIT_VIDEO); //window = SDL_CreateWindowFrom((void *)(gwnd)); window = SDL_CreateWindow("窗口标题",300,300,300,300,SDL_WINDOW_SHOWN| SDL_WINDOW_RESIZABLE); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); if (window) { renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (!renderer) { renderer = SDL_CreateRenderer(window, -1, 0); } if (renderer) { //if (!SDL_GetRendererInfo(renderer, &renderer_info)) } } SDL_Surface*surface = SDL_GetWindowSurface(window); SDL_FillRect(surface, NULL, SDL_MapRGB(surface->format, 0xee, 0xFF, 0xFF)); //更新surface SDL_UpdateWindowSurface(window); //延迟两秒 SDL_Delay(2000); } int _tmain1(int argc, _TCHAR* argv[]) { SDL_Window *window = NULL; // 窗口 SDL_Renderer *render = NULL;// 渲染器 SDL_Texture *texture = NULL; // 纹理 SDL_Event event; // 监听事件 int quit = 0; // 是否退出 int win_w = 640; // 窗口宽度 int win_h = 480; // 窗口高度 SDL_Rect rect; // 绘制的矩形 rect.w = 40; rect.h = 40; SDL_Init(SDL_INIT_VIDEO); // 创建窗口,参数分别是窗口的标题,x,y,w,h,最后一个参数是一些flag(SDL_WINDOW_SHOWN表示将窗口显示出来) window = SDL_CreateWindow("窗口标题",300,300,win_w,win_h,SDL_WINDOW_SHOWN| SDL_WINDOW_RESIZABLE); if (!window) { printf("创建窗口失败\n"); // goto __EXIT; return -1; } // 窗口渲染 // 创建渲染器 render = SDL_CreateRenderer(window,-1,0);// 创建渲染器 if (!render) { printf("创渲染器口失败\n"); // goto __DESTROY; return -1; } SDL_RenderClear(render); SDL_Surface*surface=SDL_LoadBMP("3dcheck.bmp"); SDL_Rect box={0, 0, surface->w*2, surface->h*2}; texture=SDL_CreateTextureFromSurface(render, surface); SDL_RenderCopy(render, texture, NULL, &box); SDL_RenderPresent(render); SDL_FreeSurface(surface); while (!quit) { SDL_WaitEvent(&event); switch (event.type) { case SDL_QUIT://退出事件 SDL_Log("quit"); quit = 1; break; default: SDL_Log("event type:%d", event.type); } } __DESTROY: if (window) // 销毁window { SDL_DestroyWindow(window); } if (render) // 销毁渲染器 { SDL_DestroyRenderer(render); } if (texture) // 销毁纹理 { SDL_DestroyTexture(texture); } __EXIT: // 退出 SDL_Quit(); return 0; }