dx11? (Как в главном потоке обновлять текстуру и в других потоках её читать и переводить в Mat)
Используйте интерфейс ID3D11DeviceContext (или по другому называется, сейчас не помню) далее разделите о потокам и все будет ок.
что бы не блокировать чтение и записи, можно сдеолать так. std::mutex textureMutex; std::condition_variable textureUpdated; в потоке главное() std::unique_lock<std::mutex> lock(textureMutex); textureUpdated.wait(lock); cv::Mat image(100, 100, CV_8UC1); // создание объекта Mat for (int i = 0; i < image.rows; i++) for (int j = 0; j < image.cols; j++) image.at<uchar>(i, j) = textureData[i * image.cols + j]; в потоке 2 // Здесь происходит обновление текстуры (например, через DirectX 11) // Для примера просто заполним текстуру случайными данными std::unique_lock<std::mutex> lock(textureMutex); textureData.resize(100); // Пример размера текстуры std::generate(textureData.begin(), textureData.end(), []() { return rand() % 256; }); textureUpdated.notify_all(); как то так.....
Обсуждают сегодня