从C+;从外部C库公开C对象+;使用Rcpp再次进行R和R操作
这是关于这个问题的后续问题: @DirkEddelbuettel公正地批评了上述问题,认为其范围太广,因此我在这里试图更具体地说明我的目标,同时提供一些实际代码来举例说明我在这个问题上的尝试 问题的描述 第一件事:请注意,我在代码中使用了两个类似的名称:从C+;从外部C库公开C对象+;使用Rcpp再次进行R和R操作,r,rcpp,R,Rcpp,这是关于这个问题的后续问题: @DirkEddelbuettel公正地批评了上述问题,认为其范围太广,因此我在这里试图更具体地说明我的目标,同时提供一些实际代码来举例说明我在这个问题上的尝试 问题的描述 第一件事:请注意,我在代码中使用了两个类似的名称:GLuint和GLuint 我正试图将这个C OpenGL功能包装在R中(取自此处:): 方法 我正在使用Rcpp实现这些目标: 提供从R分配Gluint对象的方法;也许通过实例化一个S4对象,将C对象(GLuinttex)封装在里面 然后,使用
GLuint
和GLuint
我正试图将这个C OpenGL功能包装在R中(取自此处:):
方法
我正在使用Rcpp实现这些目标:
Gluint
对象的方法;也许通过实例化一个S4对象,将C对象(GLuint
tex)封装在里面gl\u gen\u textures
的R公开函数,该函数接受一个整数和1中提到的对象。在内部,此函数gl\u gen\u textures
访问GLuint
C对象的内存地址,并将其传递给glGenTextures
(C库函数)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
}