Voici une illustration de ce que je fais actuellement avec deux fonctions.
Dans les deux cas, je crée une copie locale : soit une instance de std::vector<GLfloat>
ou de std::vector<GLdouble>
.
N'y a-t-il pas un raccourci n'impliquant pas de copies, où je pourrais passer de Rcpp::NumericMatrix
a GLfloat *
/ GLdouble *
d'une manière plus directe ?
#include <Rcpp.h>
#include <GLFW/glfw3.h>
using namespace Rcpp;
//' @export
// [[Rcpp::export("glLoadMatrixf")]]
void gl_load_matrixf(Rcpp::NumericMatrix m) {
std::vector<GLfloat> float_v = Rcpp::as<std::vector<GLfloat> >(m);
const GLfloat * _float_v = &float_v[0];
glLoadMatrixf(_float_v);
}
//' @export
// [[Rcpp::export("glLoadMatrixd")]]
void gl_load_matrixd(Rcpp::NumericMatrix m) {
std::vector<GLdouble> double_v = Rcpp::as<std::vector<GLdouble> >(m);
const GLdouble * _double_v = &double_v[0];
glLoadMatrixd(_double_v);
}