小编j00*_*0hi的帖子

如何使用数组初始化glm :: mat4?

我正在使用OpenGL数学库(glm.g-truc.net),并希望glm::mat4使用float-array 初始化a .

float aaa[16];
glm::mat4 bbb(aaa);
Run Code Online (Sandbox Code Playgroud)

这不起作用.

我想这个解决方案很简单,但我不知道怎么做.我找不到关于glm的好文档.我会很感激一些有用的链接.

c++ opengl math glm-math

36
推荐指数
3
解决办法
4万
查看次数

WPF中的Dispatcher to Thread关系

我不完全清楚应用程序中有多少Dispatchers以及它们与Threads相关或引用的方式.

据我所知,WPF应用程序有2个线程(一个用于输入,另一个用于UI)和1个调度程序(与UI-Thread相关联).如果我创建另一个线程 - 让我们称之为"工作线程" - 当我调用Dispatcher.CurrentDispatcher工作线程时,我会得到哪个调度程序怎么办?

另一种情况:假设一个带有2个线程的控制台应用程序 - 主线程和输入线程.在主线程上,我首先创建输入线程,然后我调用Application.Run()

Thread thread = new Thread(new ThreadStart(UserInputThreadFunction));
thread.Start();
Application.Run();
Run Code Online (Sandbox Code Playgroud)

会有一个调度员,对吗?在输入线程上,Dispatcher.CurrentDispatcher是否返回主线程的调度程序?或者将实例提供给主线程调度程序的正确方法是什么?

可能是WPF应用程序中有多个调度程序吗?有没有,创建另一个调度员是有意义的吗?

.net c# wpf dispatcher

24
推荐指数
2
解决办法
2万
查看次数

将带有自定义删除器的unique_ptr移动到shared_ptr

我有一个函数,它使用自定义删除器创建unique_ptr并返回它:

auto give_unique_ptr() {
    auto deleter = [](int* pi) {
        delete pi;
    };
    int* i = new int{1234};
    return std::unique_ptr<int, decltype(deleter)>(i, deleter);
}
Run Code Online (Sandbox Code Playgroud)

在该函数的客户端代码中,我想移动unique_ptr到a shared_ptr,但我不知道如何做到这一点,因为我不知道我的自定义删除器的decltype在函数之外.

我想它应该看起来像这样:

auto uniquePtr = give_unique_ptr();
auto sharedPtr = std::shared_ptr<..??..>(std::move(uniquePtr));
Run Code Online (Sandbox Code Playgroud)

我需要写什么而不是.. ?? ..来获得正确的类型?

如果这是可能的,那么当它的使用计数达到零时,它会shared_ptr表现得很好并调用我在give_unique_ptr()函数内创建的自定义删除器吗?

c++ shared-ptr unique-ptr c++11 c++14

23
推荐指数
2
解决办法
4309
查看次数

理论上,但不是实际上,抛出函数应该被声明为noexcept吗?

声明以下函数是否安全,noexcept即使v.at(idx)理论上可以抛出out_of_range异常,但实际上不是由于边界检查?

int get_value_or_default(const std::vector<int>& v, size_t idx) noexcept {
    if (idx >= v.size()) {
        return -1;
    }
    return v.at(idx);
}
Run Code Online (Sandbox Code Playgroud)

c++ function noexcept

21
推荐指数
3
解决办法
1251
查看次数

对于擦除删除习惯用法,为什么第二个参数必须指向容器的末尾?

考虑以下代码(摘自cppreference.com,略有修改):

#include <algorithm>
#include <string>
#include <iostream>
#include <cctype>

int main()
{
    std::string str1 = "     Text with some   spaces";
    str1.erase(std::remove(str1.begin(), str1.end(), ' '), str1.end());
    std::cout << str1 << '\n';

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么第二个参数是erase必需的?(str1.end()在这种情况下。)

为什么我不能只提供其返回的迭代器removeerase?为什么我还必须告诉它要擦除的容器的最后一个元素?

这里的陷阱是,您也可以erase不使用第二个参数就进行调用,但是显然会产生错误的结果。

在某些情况下,我不想将容器的结尾作为第二个参数传递给erase

省略“ erase删除-删除”习惯用法的第二个参数是否总是一个错误,或者这可能是一个有效的做法?

c++ stl erase-remove-idiom

17
推荐指数
1
解决办法
440
查看次数

AVFoundation:视频到OpenGL纹理工作 - 如何播放和同步音频?

我已经设法将一帧电影的视频轨道加载到带AVFoundation的OpenGL纹理中.我按照答案中描述的步骤进行操作:iOS4:如何将视频文件用作OpenGL纹理? 并从WWDC2010的GLVideoFrame示例中获取了一些代码,可以在此处下载:http://bit.ly/cEf0rM

如何与视频同步播放电影的音轨.我认为在单独的播放器中播放它并不是一个好主意,而是使用相同的音频轨道OpenGL.

AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

我检索了一个videoframe,它是CADisplayLink-callback中的时间戳

CMSampleBufferRef sampleBuffer = [self.readerOutput copyNextSampleBuffer];
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp( sampleBuffer );
Run Code Online (Sandbox Code Playgroud)

哪里AVFoundation是类型GLVideoFrame

如何获得相应的音频样本?以及如何玩它们?


编辑:

我看了一下,我想,最好是使用WWDC2010AudioToolbox.framework使用此处描述的方法:AVAssetReader和Audio Queue流问题

AVFoundation中还有一个音频播放器:AVAsset.但我不知道我应该如何将数据传递给它所readerOutput期望的-initializer AVAssetReaderTrackOutput*.此外,我不认为这是我的最佳选择,因为我AudioQueue必须为每个新的音频样本创建一个新的实例,据我所知.

还有其他建议吗?播放原始音频样本的最佳方式是AudioToolbox.framework什么?

opengl-es avfoundation avaudioplayer ios4 ios

16
推荐指数
1
解决办法
7512
查看次数

Windows Phone 7上的HashSet <T>

Windows Phone 7上没有System.Collections.Generic.HashSet吗?

c# silverlight windows-phone-7

14
推荐指数
1
解决办法
2517
查看次数

自定义分配器可以替代智能指针的向量?

这个问题是关于拥有指针,使用指针,智能指针,向量和分配器的。

我对代码体系结构的想法有些迷茫。此外,如果这个问题在某个地方已经有答案,1.抱歉,但是到目前为止我还没有找到满意的答案,并且2.请指出。

我的问题如下:

我有一个存储在向量中的“事物”,以及这些“事物”的几个“消费者”。因此,我的第一次尝试如下所示:

std::vector<thing> i_am_the_owner_of_things;
thing* get_thing_for_consumer() {
    // some thing-selection logic
    return &i_am_the_owner_of_things[5]; // 5 is just an example
}

...

// somewhere else in the code:
class consumer {
    consumer() {
       m_thing = get_thing_for_consumer();
    }

    thing* m_thing;
};
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,这是安全的,因为在任何情况下,“事物”的寿命都超过了“消费者”。但是,可以在运行时添加更多的“事物”,这可能会成为问题,因为如果std::vector<thing> i_am_the_owner_of_things;重新分配了这些事物,则所有thing* m_thing指针都将变为无效。

一种解决方案是将唯一的指针存储到“事物”,而不是直接存储“事物”,即如下所示:

std::vector<std::unique_ptr<thing>> i_am_the_owner_of_things;
thing* get_thing_for_consumer() {
    // some thing-selection logic
    return i_am_the_owner_of_things[5].get(); // 5 is just an example
}

...

// somewhere else in the code:
class consumer {
    consumer() {
       m_thing …
Run Code Online (Sandbox Code Playgroud)

c++ shared-ptr allocator unique-ptr c++11

14
推荐指数
1
解决办法
602
查看次数

如何使用boost-library为iOS(设备和模拟器)构建ASSIMP库?

我想在iOS项目中使用ASSIMP库http://assimp.sourceforge.net.不幸的是,我对makefile和那些东西不是很有经验,所以我需要一些帮助.

我已经下载了源代码,首先我尝试用make构建(在代码子文件夹中)在makefile中我添加了INCLUDEFLAGS = -I/Lib因为我的boost头文件在/ Lib/boost中执行make static成功但有一些警告.生成静态库(.a).

然后我尝试将.a文件添加到我的xcode项目中,并将assimp-header文件夹指定为附加的include目录(Other Search Paths).链接失败的消息是库没有正确的架构(模拟器需要i386)

file libassimp.a 输出:"libassimp.a:当前ar存档随机库"

我如何为i386架构和arm6或arm7构建库,无论我在iOS设备上需要什么?

是否可以仅使用boost-headers,还是更好/有必要将boost构建为库?目前我只使用boost头,这应该没问题,因为boost是一个只有头的库?!

还有一个cmake - makefile(CMakeLists.txt).cmake是建立图书馆的推荐方式,但我对cmake没有任何经验.

或者另一个想法:是否可以通过xcode构建库?最终结果应该是i386,arm6和arm7架构的库.

我该怎么办?如何?


编辑:

我刚刚发现文件中有以下预处理程序检查aiDefines.h:

#if defined(_MSC_VER)
    // See http://msdn.microsoft.com/en-us/library/b0084kay.
#   if defined(_M_IX86)
#       define ASSIMP_BUILD_X86_32BIT_ARCHITECTURE
#   elif defined(_M_X64)
#       define ASSIMP_BUILD_X86_64BIT_ARCHITECTURE
#   elif defined(_M_IA64)
#       define ASSIMP_BUILD_IA_64BIT_ARCHITECTURE
#   else
#       error unknown architecture
#   endif
#elif defined(__GNUC__)
    // See http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html.
#   if defined(__x86_32__) || defined(__i386__)
#       define ASSIMP_BUILD_X86_32BIT_ARCHITECTURE
#   elif defined(__x86_64__)
#       define ASSIMP_BUILD_X86_64BIT_ARCHITECTURE
# …
Run Code Online (Sandbox Code Playgroud)

boost makefile cmake ios

11
推荐指数
1
解决办法
6548
查看次数

包含与非平凡成员的联合的类的构造函数和复制构造函数

我正在尝试实现一个自定义变体类型,它使用union来存储各种不同类型的数据.在该领域,type_id我计划存储联合中存储的数据的类型.工会包含非平凡的成员.这是我目前的实施:

struct MyVariant {
  enum { t_invalid, t_string, t_int, t_double, t_ptr, t_dictionary } type_id;
  union {
    int                             as_int;
    double                          as_double;
    std::string                     as_string;
    std::unique_ptr<int>            as_ptr;
    std::map<int, double>           as_dictionary;
  };
};
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个MyVariant类似如下的实例:

MyVariant v;
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:调用隐式删除的MyVariant默认构造函数.所以,我尝试手动实现构造函数,如下所示:

MyVariant() : type_id{t_int}, as_int{0} {}
Run Code Online (Sandbox Code Playgroud)

这给了我一个类似的错误消息:尝试使用已删除的功能.接下来,我尝试实现以下构造函数:

MyVariant(int value) : type_id{t_int}, as_int{value} {}
Run Code Online (Sandbox Code Playgroud)

并构造我的实例如下:

MyVariant v{123};
Run Code Online (Sandbox Code Playgroud)

=>相同的错误消息:尝试使用已删除的功能.

我也开始实现一个拷贝构造函数,它看起来如下.但是,当然这对编译器错误没有帮助.

MyVariant::MyVariant(const MyVariant& other)
{
    type_id = other.type_id;
    switch (type_id) {
        case t_invalid:
            break;
        case t_string:
            new (&as_string) std::string();
            as_string = …
Run Code Online (Sandbox Code Playgroud)

c++ constructor unions c++11 c++14

11
推荐指数
1
解决办法
2953
查看次数