【发布时间】:2021-09-07 08:26:53
【问题描述】:
我制作了一个使用 SDL 进行显示和声音的 C++ 程序。我正在实现 gtest 来测试图形功能,例如绘制像素:
void Interface::draw_pixel(unsigned short x, unsigned short y, bool on) {
if (on) {
SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE);
} else {
SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
}
SDL_Rect rect = {normalize_x(x), normalize_y(y), SIZE_MULTIPLIER_, SIZE_MULTIPLIER_};
SDL_RenderFillRect(renderer, &rect);
}
并检查是否确实绘制了该像素:
bool Interface::is_pixel_on(int x, int y) {
p_ = (uint8_t *) SDL_GetWindowSurface(window)->pixels + normalize_y(y) * SDL_GetWindowSurface(window)->pitch +
normalize_x(x) * bpp_;
SDL_GetRGB(*(uint32_t *) p_, SDL_GetWindowSurface(window)->format, &rgb_.r, &rgb_.g, &rgb_.b);
return rgb_.r != 0;
}
我想绘制一个像素并检查它是否是在 C.I. 中绘制的。测试。我尝试使用 SDL_WINDOW_HIDDEN 标志创建 SDL 窗口,但它没有绘制并且我的测试失败。
你有什么想法或提示应该怎么做吗?
【问题讨论】:
-
将您的逻辑在 gui 和计算之间分离。不要测试图书馆是否指出了这一点。测试您的逻辑是否将点放在正确的位置并进行渲染。
-
您可以使用屏幕外软件渲染器来完成此操作(不要创建窗口而是创建表面,并将渲染器与该表面相关联)。但是,即使存在窗口,这里 SDL_GetWindowSurface 也是错误的。
-
问题是您要测试什么?使用单元测试 (gtest) 测试 UI 通常很难或毫无意义。
-
我正在制作一个 CHIP8 解释器,我想检查一条指令是否确实会在显示器上打印精灵。我应该有一个单独的屏幕内存,SDL 会直接显示吗?我可以直接从那个内存中测试像素的值吗?因为目前我的显示内存在 SDL 中。
-
我的建议仍然适用,我发现来源可能是helping。
标签: c++ sdl googletest