What do you think about using Chat GPT to create functions in D?
Ferhat Kurtulmuş
aferust at gmail.com
Fri Apr 14 11:20:46 UTC 2023
On Monday, 3 April 2023 at 23:38:52 UTC, Marcone wrote:
> What do you think about using Chat GPT to create functions in
> D? I asked Chat-GPT to create a function in D that was similar
> to the rsplit() function in Python. It returned this code to me:
>
>
> import std.algorithm;
> import std.array;
> import std.string;
>
> string[] rsplit(string input, string separator, size_t maxsplit
> = size_t.max) {
> auto splitter = splitter(input, separator,
> SplitterFlag.all);
> auto results = splitter.array;
> if (maxsplit < results.length - 1)
> results = results[results.length - maxsplit - 1 .. $];
> return results;
> }
Recently, it helped me figure out an OpenGL task using d.
This is the code it suggests after I provide some details to
it about the case and the error I get:
```d
Slice!(RCI!ubyte, 3LU, Contiguous) plot2imslice() @nogc
nothrow
{
import mir.rc;
Slice!(RCI!ubyte, 3LU, Contiguous) imgslice =
rcslice!ubyte([height, width, 3], 0);
glfwMakeContextCurrent(_glfwWindow);
// create and bind framebuffer
GLuint fbo;
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
// create and bind texture
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0,
GL_RGB, GL_UNSIGNED_BYTE, null);
glFramebufferTexture2D(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
// render scene to framebuffer
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
// render your scene here
// read pixel data from framebuffer
glReadPixels(0, 0, width, height, GL_RGB,
GL_UNSIGNED_BYTE, imgslice.ptr);
// flip image vertically
for (size_t y = 0; y < height / 2; y++) {
for (size_t x = 0; x < width; x++) {
// swap rows
swap(imgslice[y][x], imgslice[height - y - 1][x]);
}
}
// unbind framebuffer and cleanup
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glDeleteTextures(1, &texture);
glDeleteFramebuffers(1, &fbo);
return imgslice;
}
```
And this is the code after required modifications:
```d
auto plot2imslice() @nogc nothrow
{
import mir.rc;
Slice!(RCI!ubyte, 3LU, Contiguous) imgslice =
rcslice!ubyte([height, width, 3], 0);
glfwMakeContextCurrent(_glfwWindow);
// create and bind framebuffer
GLuint fbo;
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
// create and bind texture
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height,
0, GL_RGB, GL_UNSIGNED_BYTE, null);
glFramebufferTexture2D(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
// render scene to framebuffer
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
// render scene here
render();
// read pixel data from framebuffer
glReadPixels(0, 0, width, height, GL_RGB,
GL_UNSIGNED_BYTE, imgslice.ptr);
import mir.utility : swap;
// flip image vertically to correct generated image
foreach (y; 0..height / 2) {
each!swap(imgslice[y], imgslice[height - y - 1]);
}
// unbind framebuffer and cleanup
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glDeleteTextures(1, &texture);
glDeleteFramebuffers(1, &fbo);
return imgslice;
}
```
This comment of chatGPT saved the day :) // render your scene here
More information about the Digitalmars-d-learn
mailing list