小编Pri*_*tic的帖子

我什么时候需要使用OpenGL函数加载器?

关于何时需要使用像GLEW这样的OpenGL函数加载器,我有点困惑.通常,您似乎首先获得一个窗口和有效的OpenGL上下文,然后尝试加载函数.

  • 有时这些函数被称为扩展,有时它们也被称为核心函数.似乎加载并归类为"核心"和"扩展"的是依赖于平台的.除了一些基本集之外还加载了哪些函数?

  • 您是否还需要在OpenGL ES平台上以相同的方式加载函数?快速浏览GLEW,我没有看到对Open GL ES的明确支持.其他GL函数加载器库明确提到了专门针对ES的支持(例如https://github.com/Dav1dde/glad)

opengl opengl-es

8
推荐指数
1
解决办法
5269
查看次数

Google的V8引擎是否真的限制为每个进程1个VM?

我无法直截了当地回答这个问题.Google的V8引擎是否真的限制为每个进程1个VM?

如果谷歌的v8引擎仅限于每个进程只有1个虚拟机,那么它是否会将自己排除在库中使用?假设我编写了一个使用名为LibA的V8的c ++库.还有其他人编写了另一个使用V8的库,称为LibB.如果应用程序链接到LibA和LibB都会发生坏事(对吗?).

我需要一个快速(速度是实际上最重要的要求)javascript解析器我正在尝试写一个lib,但我不想使用v8如果我遇到这个问题(很可能就是那种链接到它的应用程序也会在某些时候使用v8).

javascript c++ v8

7
推荐指数
1
解决办法
946
查看次数

我怎样才能找到扭曲场景中对象的OpenGL调用?

我正在混合两个使用OpenGL的库:Qt和OpenSceneGraph.我的目标是OpenGL ES 2,所以一切都是通过着色器和ES 2兼容调用完成的.

我通过尝试将OSG绘制到QDeclarativeItem上来专门使用OSG和QtDeclarative.我按照Qt文档中建议的方式执行此操作:在beginNativePainting()/ endNativePainting()之间包装所有OpenGL调用.

这工作正常,直到我在OpenSceneGraph场景中使用纹理.当我这样做时,由于缺少更好的单词,我的QML窗口变得"混乱".为了使其尽可能简单,我的OSG场景包含一个应用了纹理的平面.我使用基本的OpenGL调用重新创建了场景,不再出现问题.这里的问题总结为一堆图片:

  • QtDeclarative引擎使用OpenGL绘制内容.我设置了一个简单的QML页面:

在此输入图像描述

  • 我直接使用OpenGL创建一个简单的场景.它是一个涂有纹理的平面.

在此输入图像描述

  • 现在我尝试在OSG中设置相同的场景......相同的着色器等.

在此输入图像描述

你可以看到最后一个截图发生了奇怪的事情.不要担心原始OpenGL场景透明的黑色背景,这只是使用黑色清晰颜色的OSG.问题是用QML(矩形)设置的其他项目搞砸了.

编辑:澄清会发生什么:我用QML绘制的矩形都伸展到屏幕的右边缘.我还注意到,如果我在QML中的OpenSceneGraph项目之后绘制矩形,它们就不会出现(之前我没有注意到).我在以下屏幕截图中的OSG项目之后绘制紫色黑色矩形...请注意它会消失.可能会发生更多奇怪的事情,但这是我观察到的所有矩形播放.

之前 在此输入图像描述

在此输入图像描述

我是OpenGL的新手,所以我不知道什么样的调用/状态设置会导致这样的事情发生.我认为OpenSceneGraph会使一些OpenGL状态发生变化,这会搞砸Qt的绘图引擎.我也知道这只会在OSG使用纹理时发生...如果我在OSG场景中不应用纹理,则不会发生这种情况.这就是我被困住的地方.

此外,我尝试使用BuGLe在OSG中启用和不启用纹理的OpenGL调用跟踪,以查看是否可以找出有问题的状态更改.我发现了一些差异,甚至一些全局状态OSG改变了(例如glPixelStorei())两者之间,但重置我发现的变化没有区别.如果我知道要寻找什么,这将有很大帮助.如果有人感到疯狂,我也有堆栈痕迹:

编辑2: 这是一个可能有用的差异.在相关线条明显之前,您需要向下滚动. http://www.mergely.com/nUEePufa/

编辑3: 哇!好吧,那差异对我有所帮助.OSG启用VertexAttribArray 3但不禁用它.在OSG渲染其帧之后调用glDisableVertexAttribArray(3)似乎可以部分解决问题; 没有更多的QML矩形拉伸.但是,OSG项目后绘制的矩形仍未显示.

qt opengl-es openscenegraph qml

7
推荐指数
1
解决办法
1188
查看次数

如何在线程中使用v8?

我试图在一个不是主线程的线程中使用来自c ++的v8.就v8而言,没有多线程,所有v8对象都在该线程中创建和销毁.什么都没有并行运行,没有任何共享.当我从主线程运行我的程序时,一切正常.当我在另一个线程中有v8内容时,在创建v8 :: HandleScope时出现分段错误.

我找不到任何关于如何使用v8实际处理线程的有用文档.搜索时会经常弹出"使用隔离和锁定器"的指令,但我找不到任何关于如何完成此操作的示例.在v8 :: Isolate上有这个API文档,但该页面上没有任何内容告诉我在特定情况下是否需要它们(我不共享内存或并行执行).v8 :: Locker()上的文档甚至没有关于该类的信息.项目中包含的样本也不涉及任何此类样本.

所以我的问题是......

  • 我需要在这里使用隔离物和/或储物柜吗?
  • 我能得到一个如何使用它们的最小例子吗?即使是伪代码或其他东西也会非常有用

c++ multithreading v8

7
推荐指数
1
解决办法
3402
查看次数

如何在交叉编译中使用rpath-link?

当我使用我正在使用的特定工具链交叉编译时,我无法确认我对rpath-link如何工作的理解(尽管我认为这是一般适用于交叉编译的一般问题).

当我看一下构建库和应用程序时传递给编译器和链接器的标志时,我看到以下内容传递给链接器:

-Wl,-rpath-link,/home/Dev/env/sys/crosscompiletoolchain/armle-v7/lib/
Run Code Online (Sandbox Code Playgroud)

因此,这是嵌入到为我的开发机器上的目标设备构建的共享库中的路径.这是有道理的,因为在部署到设备之前,我将在开发机器上进行所有最终链接.当我最终部署到设备(即共享库+应用程序)时,这些共享库是否会有无用的rpath-link?

无论如何,构建的库和应用程序似乎在目标上运行良好,如果我不得不猜测我会说它因为应用程序具有由/ lib /作为其默认库搜索之一的设备操作系统提供的环境paths(rpath-link仅指定要搜索的第一组dirs).它是否正确?

cross-compiling

6
推荐指数
1
解决办法
5480
查看次数

如何获取 webpack 包中使用的所有包的列表?

我需要审核 webpack 包中使用的节点包列表。相应的 webpack 配置文件将生产依赖项列表(即来自应用程序的非开发依赖package.json项)作为入口点列表传递到module.exports. 理想情况下,我会得到package.json最终在包中的每个节点包的所有文件的列表。仅搜索node_modules应用程序的目录是不够的,因为这包括 devDependencies 等。

我怎样才能用 webpack 做到这一点?

node.js npm webpack webpack-3

6
推荐指数
0
解决办法
873
查看次数

如何使用udev识别设备

我想用libudev来监视某些设备.具体来说,我想监控可移动存储:USB硬盘,USB密钥,SD卡等.如果你知道设备的父系统的'子系统'和'devtype',libudev API可以让你找到一个设备.我在我的计算机上尝试了这些设备并使用udevadm发现所有存储类型都有'block' - >'scsi'的设备子系统,但我不知道这些设备有什么样的devtype.是否有一个devtypes和子系统的列表,我可以在某处使用它作为参考,或者是一个更好的方法来查找devtype?

linux usb udev

5
推荐指数
1
解决办法
7613
查看次数

使用C++进行线程安全并通过引用传递

我想确认我对线程的理解并通过C++中的引用传递.以下功能线程是否安全?

QString sA = "hello";
QString sB = "world";
bool someFlag = AreStringsEqual(sA,sB);

...

bool AreStringsEqual(QString const &stringA, QString const &stringB)
{
    if(stringA == stringB)
    {   return true;   }

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

我认为它线程安全的.如果有人能确认我的思考过程,或者告诉我我不知道我在说什么,我会喜欢它:)

  • 进程内存中有两个sA和sB副本.在Thread1的堆栈上创建一个集合,在Thread2的堆栈上创建第二个集合.因为我们通过引用传递,所以每个线程在内存中只需要一组sA和sB来执行函数调用.

  • 如果我们通过值传递,则在进程的内存中最多可以有四个sA和sB副本(每个线程有两个集合),在某个时间点,两个线程都在函数调用中交换处理器控制.

  • 在任何情况下都不共享内存,因此该函数是线程安全的.

对不起,如果这个问题非常简单,那么线程已经让我的大脑变得干脆

PRIS

c++ thread-safety

5
推荐指数
1
解决办法
4190
查看次数

以嵌套或递归方式(即在处理程序内)调用asio io_service poll()或poll_one()是否有效?

以嵌套或递归方式(即从处理程序内)调用asio :: io_service :: poll()或poll_one()是否有效?

一个真正基本的测试似乎暗示这是有效的(我只在一个平台上完成了测试)但我想确保从处理程序中再次调用poll()被认为是有效的行为.

我在asio文档中找不到任何相关信息,所以我希望那些对asio内部工作有更多经验的人可以通过解释或引用来验证这一点.

基本测试:

struct NestedHandler
{
    NestedHandler(std::string name, asio::io_service * service) :
        name(name),
        service(service)
    {
        // empty
    }

    void operator()()
    {
        std::cout << " { ";
        std::cout << name;

        std::cout << " ...calling poll again... ";
        service->poll();
        std::cout << " } ";

    }

    std::string name;
    asio::io_service * service;
};

struct DefaultHandler
{
    DefaultHandler(std::string name) :
        name(name)
    {
        // empty
    }

    void operator()()
    {
        std::cout << " { ";
        std::cout << name;
        std::cout << " } …
Run Code Online (Sandbox Code Playgroud)

c++ boost-asio

5
推荐指数
1
解决办法
1161
查看次数

stringstream的第一个字符串参数保存为指针/垃圾

可能重复:
在C++中将字符串打印到临时流对象
std :: ostringstream打印c-string的地址而不是其内容

我正在尝试使用stringstream构建一个字符串,就像你使用cout一样.这适用于类似日志记录的类.我遇到的问题是,如果<<运算符的第一个参数是一个字符串,当我随后使用stringstream :: str()调用打印出该字符串流时,我得到一个垃圾地址,而不是字符串.这只发生在FIRST字符串中.后续字符串很好.数字总是好的.这是代码:

    // class I use to print out the stream
    class StreamWriter
    {
    public:
        StreamWriter()
        {}

        ~StreamWriter()
        {
            std::string myMessage = m_stringstream.str();
            std::cout << myMessage << std::endl;
        }

        std::stringstream m_stringstream;
    };

    // macro for simplification
    #define OSRDEBUG (StreamWriter().m_stringstream)

    // actual use
    OSRDEBUG << "Hello " << "my " << "name is Pris " << 123456;

    // output
    0x8054480my name is Pris 123456
    0x8054480my name is Pris 123456
    0x8054480my name is Pris 123456
    0x8054480my …
Run Code Online (Sandbox Code Playgroud)

c++ pointers stringstream memory-address

4
推荐指数
1
解决办法
1089
查看次数