- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我用 SDL2 进行了一些非常简单的绘图,这些绘图在 Windows 下运行得很好,但现在我已经将它移植到 Linux 上,而不是从我生成的不同线程中绘图。
我正在使用互斥量控制对渲染器的访问。
函数按预期处理和输出日志记录,唯一似乎不起作用的是渲染器从不更新 Linux 下的显示。
如果我注释掉线程,并从 main 运行函数,我会得到预期的结果。代码在 Linux 和 Windows 版本之间没有变化。
代码在 -wall 和 -pedantic 下编译时没有警告。自从我开始使用 Linux 进行编译以来,我添加了 -pthread 标志以备不时之需(没有任何区别)。
如果有人知道任何问题或者可能知道为什么这不起作用,那你就是帮了我一个大忙。
static int thread_processing(void* data)
{
srand(time(NULL)); //randomize
ThreadData *td = data;
Bucket *bucket;
int b_Id = -1;
Color threadColor;
//unique color for each respective thread
color_randomize(&threadColor);
threadColor.a = 255;
fprintf(stderr, "%d Buckets to process..\n", td->bArray->size);
while (1) {
//check there are buckets left to process
if (td->bArray->rendered >= td->bArray->size)
break;
//acquie/lock access to bucket array
SDL_LockMutex(td->b_mutex);
//retrieve buucket id to process
b_Id = td->bArray->rendered;
td->bArray->rendered++;
fprintf(stderr, "Rendering bucket: %d\n", b_Id);
//release access to bucket array
SDL_UnlockMutex(td->b_mutex);
//retrieve addr of bucket to process
bucket = &(td->bArray->buckets[b_Id]);
//lock access to renderer
SDL_LockMutex(td->r_mutex);
//draw rect on screen where bucket will be processed
draw_bucketOutline(td->renderer, bucket, &threadColor);
SDL_RenderPresent(td->renderer);
//release access to renderer object
SDL_UnlockMutex(td->r_mutex);
//process the bucket
process_bucket(td->scene, bucket);
//acquire/lock acess to renderer object
SDL_LockMutex(td->r_mutex);
//draw the processed data ot the screen
draw_bucket(td->renderer, bucket);
SDL_RenderPresent(td->renderer);
//release access to renderer object
SDL_UnlockMutex(td->r_mutex);
}
return 0;
}
void draw_bucketOutline(SDL_Renderer *renderer, Bucket *b, Color *color)
{
//set the colour of the outline
SDL_SetRenderDrawColor(renderer, 125, 125, 125, 255);
//set the outline position
SDL_Rect rect;
rect.w = b->resolution.width;
rect.h = b->resolution.height;
rect.x = b->start.x;
rect.y = b->start.y;
//draw the outline
SDL_RenderDrawRect(renderer, &rect);
//crop rectangle inwards for filling inside of outline
rect.w -= 2;
rect.h -= 2;
rect.x += 1;
rect.y += 1;
//set colour for fill area
SDL_SetRenderDrawColor(renderer, color->r, color->g, color->b, color->a);
//draw fill area
SDL_RenderFillRect(renderer, &rect);
}
主要.....
//iterate over threads, do the processing
int t;
for (t = 0; t < THREAD_COUNT; t++) {
threads[t] = SDL_CreateThread(thread_processing, NULL, &td);
}
//iterate over threads, clean them up
for (t = 0; t < THREAD_COUNT; t++) {
int status;
SDL_WaitThread(threads[t], &status);
}
编译
gcc -Wall -pedantic -lm -I/usr/include/SDL2 -D_REENTRANT -lX11 -pthread raytracer.c -lSDL2 -o raytracer
最佳答案
Linux 上的 SDL2 使用 OpenGL 加速渲染(它在 Windows 上默认为 d3d 加速),并且 OpenGL 具有线程本地上下文。您不能在不同的线程中使用相同的 GL 上下文。你必须在单线程中渲染,例如通过将渲染命令放入队列,然后在渲染线程中重播它们。还有你shouldn't have used multiple rendering threads首先。
关于c - sdl2 从 Linux 和 Windows 上的不同线程绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39641682/
我有 table 像这样 -------------------------------------------- id size title priority
我的应用在不同的 Activity (4 个 Activity )中仅包含横幅广告。所以我的疑问是, 我可以对所有横幅广告使用一个广告单元 ID 吗? 或者 每个 Activity 使用不同的广告单元
我有任意(但统一)数字列表的任意列表。 (它们是 n 空间中 bin 的边界坐标,我想绘制其角,但这并不重要。)我想生成所有可能组合的列表。所以:[[1,2], [3,4],[5,6]] 产生 [[1
我刚刚在学校开始学习 Java,正在尝试自定义控件和图形。我目前正在研究图案锁,一开始一切都很好,但突然间它绘制不正确。我确实更改了一些代码,但是当我看到错误时,我立即将其更改回来(撤消,ftw),但
在获取 Distinct 的 Count 时,我在使用 Group By With Rollup 时遇到了一个小问题。 问题是 Rollup 摘要只是所有分组中 Distinct 值的总数,而不是所有
这不起作用: select count(distinct colA, colB) from mytable 我知道我可以通过双选来简单地解决这个问题。 select count(*) from (
这个问题在这里已经有了答案: JavaScript regex whitespace characters (5 个回答) 2年前关闭。 你能解释一下为什么我会得到 false比较 text ===
这个问题已经有答案了: 奥 git _a (56 个回答) 已关闭 9 年前。 我被要求用 Javascript 编写一个函数 sortByFoo 来正确响应此测试: // Does not cras
所以,我不得不说,SQL 是迄今为止我作为开发人员最薄弱的一面。也许我想要完成的事情很简单。我有这样的东西(这不是真正的模型,但为了使其易于理解而不浪费太多时间解释它,我想出了一个完全模仿我必须使用的
这个问题在这里已经有了答案: How does the "this" keyword work? (22 个回答) 3年前关闭。 简而言之:为什么在使用 Objects 时,直接调用的函数和通过引用传
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: what is the difference between (.) dot operator and (-
我真的不明白这里发生了什么但是: 当我这样做时: colorIndex += len - stopPos; for(int m = 0; m < len - stopPos; m++) { c
思考 MySQL 中的 Group By 函数的最佳方式是什么? 我正在编写一个 MySQL 查询,通过 ODBC 连接在 Excel 的数据透视表中提取数据,以便用户可以轻松访问数据。 例如,我有:
我想要的SQL是这样的: SELECT week_no, type, SELECT count(distinct user_id) FROM group WHERE pts > 0 FROM bas
商店表: +--+-------+--------+ |id|name |date | +--+-------+--------+ |1 |x |Ma
对于 chrome 和 ff,当涉及到可怕的 ie 时,这个脚本工作完美。有问题 function getY(oElement) { var curtop = 0; if (oElem
我现在无法提供代码,因为我目前正在脑海中研究这个想法并在互联网上四处乱逛。 我了解了进程间通信和使用共享内存在进程之间共享数据(特别是结构)。 但是,在对保存在不同 .c 文件中的程序使用 fork(
我想在用户集合中使用不同的功能。在 mongo shell 中,我可以像下面这样使用: db.users.distinct("name"); 其中名称是用于区分的集合字段。 同样我想要,在 C
List nastava_izvjestaj = new List(); var data_context = new DataEvidencijaDataContext();
我的 Rails 应用程序中有 Ransack 搜索和 Foundation,本地 css 渲染正常,而生产中的同一个应用程序有一个怪癖: 应用程序中的其他内容完全相同。 我在 Chrome 和 Sa
我是一名优秀的程序员,十分优秀!