SDL2 基础(四)100行让SDL 不停的渐变颜色

·  阅读 684

目的

渲染主要是为了测试下程序,尽量确保在添加FFmpeg 之前,SDL 层出现BUG。 次文件可以简单作为模板使用。 也可以简单封装成C++类文件,方便使用。这里不展开了

之后会创建一个FFmpeg播放类。然后在这里直接调用FFmpeg 就可以 做一个简单的万能播放器了。

渲染颜色

运行代码可以看到创建一个窗口,随机产生一个颜色的背景,然后开始不停的渐变颜色 。 源码非常简单。不到100行 直接上代码了。

代码跟之前不同,主要是添加了,一些判断,毕竟C代码是一定要释放内存的,这里简单把之前的内容去掉的部分先补上。


#include <iostream>
using namespace std;

extern "C" {
#include "SDL.h" 
}

 
int main(int argc, char* argv[]) {
	int ret = -1;
	//set defualt size of window 
	int video_width = 640;
	int video_height = 480;

	//此处为SDL  渲染部分 需要的代码
	SDL_Window* window;
	SDL_Renderer* renderer;
	SDL_Texture* texture;
	SDL_Rect sdlRect{ 0,0, video_width, video_height };
	 

	if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)) {
		SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "ERROR SDL_Init - %s\n", SDL_GetError());
		return ret;
	}

	window = SDL_CreateWindow("Easy Player",
		SDL_WINDOWPOS_UNDEFINED,
		SDL_WINDOWPOS_UNDEFINED,
		video_width, video_height,
		SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);

	if (window == NULL) {
		SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "ERROR SDL_CreateWindow - %s\n", SDL_GetError());
		return -1;
	}

	renderer = SDL_CreateRenderer(window, -1, 0);
	if (!renderer) {
		SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "ERROR SDL_CreateRenderer - %s\n", SDL_GetError());
		return -1;
	}
 
	int pixformat = SDL_PIXELFORMAT_IYUV;
	texture = SDL_CreateTexture(renderer,
		pixformat,
		SDL_TEXTUREACCESS_STREAMING,
		video_width,
		video_height);
	if (!texture) {
		SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "ERROR SDL_CreateTexture - %s\n", SDL_GetError());
		return -1;
	}


	int count = 1000;
	int color_r = 255;
	int color_g = 255;
	int color_b = 255;
	while (count--) {

		//SDL_UpdateYUVTexture(texture, NULL,
		//	pict->data[0], pict->linesize[0],
		//	pict->data[1], pict->linesize[1],
		//	pict->data[2], pict->linesize[2]);

		 
		// 测试 修改 颜色  此处 应该调用 FFmpeg 来显示视频数据就OK 了
		//SDL_SetRenderDrawColor(renderer, 255, 255, 0, 255);// 默认黄色
		color_r = (color_r += 1) % 255;
		color_g = (color_g += 2) % 255;
		color_b = (color_b += 3) % 255;
		cout << "color_r = " << color_r << "   color_g = " << color_g << "   color_b = " << color_b << endl;
		SDL_SetRenderDrawColor(renderer, color_r, color_g, color_b, 255);

		SDL_RenderClear(renderer);
		//SDL_RenderCopy(renderer, texture, NULL, &sdlRect);
		SDL_RenderPresent(renderer);
		SDL_Delay(40);
	}

	  
	if (texture)  { SDL_DestroyTexture(texture);   } 
	if (renderer) { SDL_DestroyRenderer(renderer); }
	if (window)   { SDL_DestroyWindow(window);     }  
	// Clean up
	SDL_Quit();

	return 0;

}

复制代码
分类:
Android
收藏成功!
已添加到「」, 点击更改