Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C+;从外部C库公开C对象+;使用Rcpp再次进行R和R操作_R_Rcpp - Fatal编程技术网

从C+;从外部C库公开C对象+;使用Rcpp再次进行R和R操作

从C+;从外部C库公开C对象+;使用Rcpp再次进行R和R操作,r,rcpp,R,Rcpp,这是关于这个问题的后续问题: @DirkEddelbuettel公正地批评了上述问题,认为其范围太广,因此我在这里试图更具体地说明我的目标,同时提供一些实际代码来举例说明我在这个问题上的尝试 问题的描述 第一件事:请注意,我在代码中使用了两个类似的名称:GLuint和GLuint 我正试图将这个C OpenGL功能包装在R中(取自此处:): 方法 我正在使用Rcpp实现这些目标: 提供从R分配Gluint对象的方法;也许通过实例化一个S4对象,将C对象(GLuinttex)封装在里面 然后,使用

这是关于这个问题的后续问题:

@DirkEddelbuettel公正地批评了上述问题,认为其范围太广,因此我在这里试图更具体地说明我的目标,同时提供一些实际代码来举例说明我在这个问题上的尝试

问题的描述 第一件事:请注意,我在代码中使用了两个类似的名称:
GLuint
GLuint

我正试图将这个C OpenGL功能包装在R中(取自此处:):

方法 我正在使用Rcpp实现这些目标:

  • 提供从R分配
    Gluint
    对象的方法;也许通过实例化一个S4对象,将C对象(
    GLuint
    tex)封装在里面
  • 然后,使用一个名为
    gl\u gen\u textures
    的R公开函数,该函数接受一个整数和1中提到的对象。在内部,此函数
    gl\u gen\u textures
    访问
    GLuint
    C对象的内存地址,并将其传递给
    glGenTextures
    (C库函数)
  • 最终提供了一种销毁在R中创建的
    Gluint
    对象以及内部
    Gluint
    C对象的方法 实际代码
    这不是一个一行回答的主题。这就是为什么我们写了一个关于这个主题的完整的小插曲,这个主题已经随Rcpp一起发布了大概八到九年。你是指这个小插曲吗?否更接近你的需要。通过
    Rcpp\u EXPOSED\u AS
    进行非侵入性扩展?这不是一个一行回答的主题。这就是为什么我们写了一个关于这个主题的完整的小插曲,这个主题已经随Rcpp发布了大概八到九年。你是指这个小插曲吗?否更接近你的需要。通过
    Rcpp\u EXPOSED\u AS
    进行非侵入性扩展?
    GLuint tex;
    glGenTextures(1, &tex);
    glBindTexture(GL_TEXTURE_2D, tex);
    
    #include <Rcpp.h>
    #include <GL/glew.h>
    #include <GLFW/glfw3.h>
    using namespace Rcpp;
    
    
    class Gluint {
    public:
      Gluint() {}
      GLuint obj;
    };
    
    RCPP_MODULE(gluint_module) {
      class_<Gluint>("Gluint")
      .constructor()
      .field("obj", &Gluint::obj)
      ;
    }
    
    //' @export
    // [[Rcpp::export]]
    void gl_gen_textures(unsigned int n, Gluint& tex) {
    
      uint32_t _n;
      _n = (uint32_t) n; // Convert unsigned int to uint32_t.
      glGenTextures((GLsizei) _n, &(tex.obj));
    
    }
    
    
    // gl_gen_textures
    void gl_gen_textures(unsigned int n, Gluint& tex);
    RcppExport SEXP _glfw_gl_gen_textures(SEXP nSEXP, SEXP texSEXP) {
    BEGIN_RCPP
        Rcpp::RNGScope rcpp_rngScope_gen;
        Rcpp::traits::input_parameter< unsigned int >::type n(nSEXP);
        Rcpp::traits::input_parameter< Gluint& >::type tex(texSEXP);
        gl_gen_textures(n, tex);
        return R_NilValue;
    END_RCPP
    }